首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用codecs.open()时出现Unicode解码错误

使用codecs.open()时出现Unicode解码错误
EN

Stack Overflow用户
提问于 2012-08-22 06:27:29
回答 3查看 1.8K关注 0票数 0

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

代码语言:javascript
复制
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))

我得到的错误是:

代码语言:javascript
复制
  File "./assetshare.py", line 314, in write_file
    </ratings>""" % (values['rating_system'], rating))

我知道编码错误与Barntillåten有关,因为如果我将该单词替换为test,该函数将正常工作。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-22 06:31:36

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

代码语言:javascript
复制
rating = u'Barntillåten'

否则,在Python2中,非Unicode字符串'Barntillåten'包含字节(使用source encoding编码),而不是代码点。

票数 3
EN

Stack Overflow用户

发布于 2012-08-22 06:32:27

在Python2中,codecs.open期望读写unicode对象。您正在向它传递一个str

修复方法是确保您传递的数据是unicode

代码语言:javascript
复制
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'就足够了

代码语言:javascript
复制
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?

票数 2
EN

Stack Overflow用户

发布于 2012-08-22 06:31:57

您需要使用unicode字面量。

代码语言:javascript
复制
u'...'
u"..."
u'''......'''
u"""......"""
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12063967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档