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

rating必须是 Unicode 字符串才能包含 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文件str,但str前提是 以默认编码进行编码,这意味着为了安全起见,只有在str纯 ASCII 时才是安全的。默认编码是并且应该保留为 ASCII;请参阅更改 Python 的默认编码?

于 2012-08-21T22:32:27.397 回答
1

您需要使用unicode文字。

u'...'
u"..."
u'''......'''
u"""......"""
于 2012-08-21T22:31:56.830 回答