2016-10-20 13 views
1

私は、いくつかの奇妙な(正しくない)エンコードされたデンマーク語の文字(å-ø-æ)を含む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_HDSAM_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 

答えて

1

はその

row.decode('iso-8859-1').encode('utf-8')

試してみて、あなたがしている場合は、ファイルを閉じる文は必要ありません「と」

+0

「はstr」はオブジェクトが属性を持っていない「復号」 – Xeberdee

+0

を使用しますPython 3. 次に試してみてください 'e_row = row.encode( 'utf-8')' –

+0

これはデコード時には正しいですが、私の編集で質問が変わった。 – Xeberdee

関連する問題