我遇到一个字符编码问题,如下所示:
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,该函数将正常工作。
为什么会发生这个编码错误?我需要做些什么来修复它?
发布于 2012-08-22 06:31:36
rating必须是Unicode字符串才能包含Unicode代码点。
rating = u'Barntillåten'否则,在Python2中,非Unicode字符串'Barntillåten'包含字节(使用source encoding编码),而不是代码点。
发布于 2012-08-22 06:32:27
在Python2中,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))您可以将str对象写入codecs.open文件,但前提是str采用默认编码,这意味着为了安全起见,只有在str为纯ASCII码的情况下才是安全的。默认编码为且应保留为ASCII码;请参见Changing default encoding of Python?
发布于 2012-08-22 06:31:57
您需要使用unicode字面量。
u'...'
u"..."
u'''......'''
u"""......"""https://stackoverflow.com/questions/12063967
复制相似问题