2016-12-07 4 views
1

Я получил данные о байтах, включая символ японской йены (¥). Это, по-видимому, выражается как \xc2\xa5.Как декодировать символ японской йены в Python?

Однако я не могу декодировать символ иены. Например,

yen = b"\xc2\xa5" 
type(yen) # return bytes 
yen.decode("utf-8") # return UnicodeEncodeError: 'ascii' codec can't encode character '\xa5' error 
import chardet 
chardet.detect(yen) # return {'confidence': 0.73, 'encoding': 'windows-1252'} 
yen.decode("windows-1252") # return another UnicodeEncodeError: 'ascii' codec can't encode characters error 

Данные байт У меня может быть расшифрован, как utf-8 в других аспектах. Только символ японской йены не может быть расшифрован, независимо от того, какую кодировку вы используете.

Так как я могу его декодировать?

+4

Я не могу воспроизвести вашу проблему. 'b" \ xc2 \ xa5 "' является кодировкой UTF-8 '¥'. 'yen.decode (" utf-8 ")' дает '¥' (или 'u '\ xa5'') как для Python2, так и для Python3 для меня, как на Debian, так и на OSX. Что такое 'sys.stdout.encoding'? Похоже, что это может быть ошибка вывода, а не сама манипуляция с строкой. – Amadan

+0

@ Амадан О, правда? Я дважды проверил его, но все же получил ту же ошибку. Я использую Python 3.5 (интерактивная оболочка IPython) для macOS. – Blaszard

+1

'YEN = yen.decode ('utf-8')' отлично работает для меня. – ABcDexter

ответ

2

Проблема возникла из настроек терминала и оболочки. В частности, для того, чтобы работа декодирования работала должным образом, ваш sys.stdout.encoding должен вернуть UTF-8.

Если вы не получили UTF-8, вам необходимо указать переменную $LANG. В моем случае это вернуло en_US.UTF-8, но так как у моего ~/.zprofile не было ключевого слова export, sys.stdout.encoding было отправлено US-ASCII, а не UTF-8. Таким образом, вы должны установить в вашем ~/.zprofile (или ~/.bash_profile) как:

export LC_ALL="en_US.UTF-8" 
export LANG="en_US.UTF-8" 

И теперь вы должны получить UTF-8 от sys.stdout.encoding.

Для получения дополнительной информации о настройке правильной локали в вашей оболочке и терминале на macOS см. the following question.