2011-12-19 11 views
7

これはよく似た質問を読みましたが、しかし、何とか私のコードはまだ動作していません。UnicodeEncodeError: 'ascii'コーデックは文字u ' u2019'を位置126にエンコードできません:序数が範囲内にありません(012)

私はXMLファイルを解析しました。ここでは出力がユニコードになっていると読んでいます。私はcsvライターを使って出力をファイルに書き出しています。

私のコードでは、writerowを使用する前にutf-8でエンコードしようとしました。なぜ私はまだwriterowでエラーを取得するのですか?私の警告は、 "ユニコード!!!"このエラーが発生するまでスローされません(私はこれを複数のファイルで実行していますが、ほとんどの場合動作します)。実際には、私はなぜwriterowがasciiを使用しようとしているのかわかりませんが、utf-8を期待してはいけませんか?私は、キックのためだけにエンコード関数でutf-8をasciiに置き換えました。同じ結果。助けてください!!!

 try: 

      mystring=elem.find('./'+r2+'Description').text 


      if isinstance(mystring, unicode): 
       print("unicode!!!") 
       mystring.encode('utf-8','ignore') 
       datalist.append(mystring) 
      else:  
       datalist.append(mystring) 
     except AttributeError: 
      datalist.append('No text') 

     c.writerow(datalist) 
+1

"xmlファイルを解析しましたが、ここでは出力がユニコードになっています。" XMLをどのように解析するかを示します。 –

答えて

9

あなたがmystring.encode(...を呼び出すと、それはその場で文字列を変更していません。新しい文字列を返します。

+0

新しい文字列とは何ですか? – user1106322

+0

Oh snap、mystring2 = mystring.encode(...)次に、mystring2を追加します!ありがとう! – user1106322

+0

これは何も呼ばれていません。それは戻り値です。理由は、(a)文字列(Unicodeとバイト文字列の両方)が不変であることです。 (b)そうでなくても、それらは2つの異なる型です。したがって、Unicode文字列は、コード化されたバイト文字列に変換するだけでは動作しません。 –

関連する問題