Python: почему str () для некоторого текста из файла UTF-8 выдает UnicodeDecodeError? - PullRequest
5 голосов
/ 31 марта 2010

Я обрабатываю файл UTF-8 в Python и использовал 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 ]

6 голосов
/ 31 марта 2010

Python 2.x по умолчанию использует ASCII. Используйте unicode.encode(), если хотите превратить unicode в str:

v_dict['code'].encode('utf-8')
2 голосов
/ 31 марта 2010

Один из способов сделать это - установить кодировку по умолчанию 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")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...