Python: 为什么对UTF-8文件中的某些文本使用str()会导致UnicodeDecodeError?
我在用Python处理一个UTF-8编码的文件,使用simplejson把它加载到一个字典里。但是,当我试图把字典中的一个值转换成字符串时,出现了UnicodeDecodeError错误。
f = open('my_json.json', 'r')
master_dictionary = json.load(f)
#some json wrangling, then it fails on this line...
mysql_string += " ('" + str(v_dict['code'])
Traceback (most recent call last):
File "my_file.py", line 25, in <module>
str(v_dict['code']) + "'), "
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf4' in position 35: ordinal not in range(128)
为什么Python还会用ASCII编码呢?我以为它默认是用UTF-8的,而且输入的文件也是UTF-8编码的。
$ file my_json.json
my_json.json: UTF-8 Unicode English text
那到底是什么问题呢?
2 个回答
2
让这个功能正常工作的一种方法是明确地将默认编码设置为UTF-8,像这样:
import sys
sys.setdefaultencoding("utf-8")
不过,如果你不想让所有内容默认都是unicode,这样做可能会导致一些意想不到的问题。
更好的方法是使用unicode
函数,而不是str
:
mysql_string += " ('" + unicode(v_dict['code'])
或者你可以明确指定编码:
mysql_string += " ('" + unicode(v_dict['code'], "utf-8")
6
Python 2.x 默认使用 ASCII 编码。如果你想把一个 unicode
类型的数据转换成 str
类型,可以使用 unicode.encode()
这个方法:
v_dict['code'].encode('utf-8')