[英]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
替換該詞,該函數可以正常工作。
為什么會發生這種編碼錯誤,我需要做些什么來修復它?
在 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.