Python: 为什么对UTF-8文件中的某些文本使用str()会导致UnicodeDecodeError?

5 投票
2 回答
3664 浏览
提问于 2025-04-15 21:05

我在用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')

撰写回答