私は、いくつかの奇妙な(正しくない)エンコードされたデンマーク語の文字(å-ø-æ)を含むcsvファイルを持っています。私のDjangoビューでは、最初の行から文字列を取得しようとしていて、ファイルの2番目の行から日付を取得しようとしています。私はそれを貼り付けると、ファイルはこのように見えます。デンマーク語のデコードをデンマークの文字から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する必要があります - 私はDBに格納する値です。
ファイルを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に格納する前にデンマークに戻ってそれを変換するために何をすべきかわかりません。 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'
はEDIT:
私はCSVファイル内の文字列が実際に破損していることが判明 - と(Avidのメディアの作曲)少なくとも一貫に同じ値を適用して作成したアプリケーション - Å-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
「はstr」はオブジェクトが属性を持っていない「復号」 – Xeberdee
を使用しますPython 3. 次に試してみてください 'e_row = row.encode( 'utf-8')' –
これはデコード時には正しいですが、私の編集で質問が変わった。 – Xeberdee