Python Django视图从CSV解码丹麦字符

Python Django视图从CSV解码丹麦字符,python,django,csv,Python,Django,Csv,我有一个csv文件,其中包含一些奇怪(不正确)的丹麦编码字符(å-ø-æ)。在Django视图中,我试图从文件的第一行获取字符串,从第二行获取日期。如果我复制粘贴它,该文件看起来像这样 01,01,Project Name: SAM_LOGIK_rsm¿de_HD,,,Statistics as of: Sat Oct 01 17:09:16 2016 02,01,Project created: Tue Apr 12 09:10:16 2016,,,Last Session Started:

我有一个csv文件,其中包含一些奇怪(不正确)的丹麦编码字符(å-ø-æ)。在Django视图中,我试图从文件的第一行获取字符串,从第二行获取日期。如果我复制粘贴它,该文件看起来像这样

01,01,Project Name: SAM_LOGIK_rsm¿de_HD,,,Statistics as of: Sat Oct 01 17:09:16 2016
02,01,Project created: Tue Apr 12 09:10:16 2016,,,Last Session Started: Sat Oct 01 16:59:22 2016
字符串SAM_LOGIK_rsm?de_HD应该是SAM_LOGIK_Årsmøde_HD-这是我要存储在数据库中的值

我正在用iso-8859-1解码文件(否则我会出错)

这存储字符串“原样”,我不确定在将其存储到数据库之前如何将其转换回丹麦语。DB和Django被设置为与丹麦CHAR合作

如果我试着把它解码成utf.8,我会得到一个UnicodeDecodeError,它会显示更多的信息

01,01,Project Name: SAM_LOGIK_\x81rsm\xbfde_HD,,,Statistics as of: Sat Oct'
01 17:09:16 2016\r02,01,Project created: Tue Apr 12 09:10:16 2016,,,Last'
编辑:

我发现csv中的字符串实际上已经损坏——创建它们的应用程序(Avid Media Composer)至少一致地为-Å-å-Æ-Ø-Ø应用相同的值

Å = \x81 unassigned in UTF8
å = Œ - u"\u0153" OE ligature
Æ = ® - chr(174)
æ = ¾ - chr(190)
Ø = » - chr(187)
ø = ¿ - chr(191)
我是这样修好的

replacements = {'\x81':'Å','Œ':'å','®':'Æ','¾':'æ','¿':'ø','»':'Ø'}
with open(newest, 'rt', encoding='iso-8859-1') as csvfile:
        for i, row in enumerate(csvfile):
            if "Project Name:" in row:
                this = row.split(',')
                project_list.append("".join([replacements.get(c, c) for c in this[2][14:]]))
                if i >= 1:
                    break
            else:
                this = row.split(',')
                date = datetime.strptime(this[5][22:-1], '%c') # datetime object
                project_list.append(date)
                if i >= 1:
                    break # break at row 2
试试看

行。解码('iso-8859-1')。编码('utf-8')


如果使用“with”语句,则无需关闭文件

这在解码时是正确的,但问题在我的编辑中发生了变化。
replacements = {'\x81':'Å','Œ':'å','®':'Æ','¾':'æ','¿':'ø','»':'Ø'}
with open(newest, 'rt', encoding='iso-8859-1') as csvfile:
        for i, row in enumerate(csvfile):
            if "Project Name:" in row:
                this = row.split(',')
                project_list.append("".join([replacements.get(c, c) for c in this[2][14:]]))
                if i >= 1:
                    break
            else:
                this = row.split(',')
                date = datetime.strptime(this[5][22:-1], '%c') # datetime object
                project_list.append(date)
                if i >= 1:
                    break # break at row 2