1
解碼丹麥字符的Django視圖我有一個包含一些奇怪的(不正確的)編碼的丹麥字符(A-O-℃)csv文件。在我的Django視圖中,我試圖從第一行抓取一個字符串,並從文件的第二行抓取日期。該文件看起來像這樣,如果我複製粘貼它。從CSV
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的文件(否則我得到一個錯誤)。
with open(latest, 'rt', encoding='iso-8859-1') as csvfile:
for i, row in enumerate(csvfile):
if "Project Name:" in row:
this = row.split(',')
project_list.append(this[2][14:]) # gets the project name as is
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
csvfile.close()
該存儲串「是」,我不知道該怎麼把它兌換成丹麥之前,我將它存儲在數據庫中的內容。 DB和Django被設置爲與丹麥字符一起工作。
如果我試圖把它作爲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的)至少一貫採用相同的值的應用程序 - A-A- Æ-æ-Ø-ø
Å = \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
「海峽」對象有沒有屬性「解碼」 – Xeberdee
Python 3的 然後嘗試 'e_row = row.encode( 'UTF-8')' –
解碼時,這是正確的 - 但問題在我的編輯修改。 – Xeberdee