0

私は次のように文字エンコードの問題に遭遇しました:

rating = 'Barntillåten'
new_file = codecs.open(os.path.join(folder, "metadata.xml"), 'w', 'utf-8')
new_file.write(

"""<?xml version="1.0" encoding="UTF-8"?>
   <ratings>
        <rating system="%s">%s</rating>
   </ratings>""" % (values['rating_system'], rating))

私が得るエラーは次のとおりです。

  File "./assetshare.py", line 314, in write_file
    </ratings>""" % (values['rating_system'], rating))

エンコーディングエラーがに関連していることはわかっています。Barntillåtenその単語をに置き換えるとtest、関数は正常に機能するからです。

このエンコーディングエラーが発生するのはなぜですか?それを修正するにはどうすればよいですか?

4

3 に答える 3

3

ratingUnicodeコードポイントを含めるには、Unicode文字列である必要があります。

rating = u'Barntillåten'

それ以外の場合、Python 2では、非Unicode文字列'Barntillåten'にコードポイントではなくバイト(ソースエンコーディングが何であれエンコードされたもの)が含まれます。

于 2012-08-21T22:31:36.110 に答える
2

Python 2では、オブジェクトのcodecs.open読み取りと書き込みを想定していunicodeます。あなたはそれを渡していstrます。

修正は、渡すデータが次のようになるようにすることですunicode

new_file.write((

"""<?xml version="1.0" encoding="UTF-8"?>
"""<ratings>
        <rating system="%s">%s</rating>
   </ratings>""" % (values['rating_system'], rating)
).decode('utf-8'))

unicodeリテラル( )を使用する場合u"..."、Pythonはすべてのデータが。であることを確認しようとしますunicode。ここでは、次のものがあれば十分rating = u'Barntillåten'です。

rating = u'Barntillåten'
new_file = codecs.open(os.path.join(folder, "metadata.xml"), 'w', 'utf-8')
new_file.write(

"""<?xml version="1.0" encoding="UTF-8"?>
"""<ratings>
        <rating system="%s">%s</rating>
   </ratings>""" % (values['rating_system'], rating))

オブジェクトをcodecs.openファイルに書き込むことができますが、がデフォルトのエンコーディングでエンコードされている場合に限ります。つまり、安全のために、がプレーンASCIIである場合にのみ安全です。デフォルトのエンコーディングはASCIIのままである必要があります。Pythonのデフォルトエンコーディングの変更を参照してください。strstrstr

于 2012-08-21T22:32:27.397 に答える
1

unicodeリテラルを使用する必要があります。

u'...'
u"..."
u'''......'''
u"""......"""
于 2012-08-21T22:31:56.830 に答える