How to decode Japanese Yen symbol in Python?
我得到一个字节数据,包括日元符号(¥)。这似乎表示为\xc2\xa5。
但是,我无法解码日元符号。例如,
1 2 3 4 5 6
| 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。只有日元符号不能被解码,不管你用什么编码。
那我怎么能解码它呢?
- 我不能重复你的问题。b"\xc2\xa5"是¥的utf-8编码。在Debian和OSX上,yen.decode("utf-8")在python2和python3中为我生成¥或u'\xa5'。你的sys.stdout.encoding是什么?看起来它可能是输出中的错误,而不是字符串操作本身。
- @阿玛丹哦,真的吗?我仔细检查了一下,但还是有同样的错误。我在MacOS上使用了python 3.5(i python interactive shell)。
- 以东十一〔六〕对我来说很好。
- @阿玛丹,它让我兴奋不已。
- 试着以PYTHONIOENCODING=UTF-8 ipython的身份运行?
- 也试试这个:)
- @Blaszard在那里看到了被接受的答案,它告诉了更新.bash_配置文件。
- 那么你的LANG是什么?空的?zh_CN.UTF-8号?还有别的吗?
- @abcdexter@amadan抱歉,问题出在我的终端和shell设置中,而不是python中。我的LANG设置是en_US.UTF-8,但我没有添加export关键字。我在打印echo $LANG时得到了正确的值(en_US.UTF-8,但由于某些原因,sys.stdout.encoding只在~/.zprofile中添加export关键字时才返回UTF-8。不过,谢谢你的指导。现在一切正常。
- @Blaszard考虑回答您自己的问题,因为它可能对未来的读者有帮助;)
问题来自终端和外壳的设置。具体来说,为了使解码按预期工作,您的sys.stdout.encoding应该返回UTF-8。
如果你没有得到UTF-8,那么你应该检查$LANG变量。在我的例子中,它返回了en_US.UTF-8,但是由于我的~/.zprofile没有export关键字,sys.stdout.encoding返回了US-ASCII,而不是UTF-8。所以你应该在你的~/.zprofile中(或~/.bash_profile中)设置为:
1 2
| export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8" |
现在你应该从sys.stdout.encoding那里得到UTF-8。
有关在MacOS的shell和终端中设置正确区域设置的详细信息,请查看以下问题。