簡體   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