繁体   English   中英

使用 codecs.open() 的 Unicode 解码错误

[英]Unicode decode error using codecs.open()

我遇到了一个字符编码问题,如下所示:

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替换该词,该函数可以正常工作。

为什么会发生这种编码错误,我需要做些什么来修复它?

rating必须是 Unicode 字符串才能包含 Unicode 代码点。

rating = u'Barntillåten'

否则,在 Python 2 中,非 Unicode 字符串'Barntillåten'包含字节(使用任何源编码进行编码),而不是代码点。

在 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 的默认编码?

您需要使用unicode文字。

u'...'
u"..."
u'''......'''
u"""......"""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM