关于编码:如何在Python中解码日元符号?

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。只有日元符号不能被解码,不管你用什么编码。

那我怎么能解码它呢?


问题来自终端和外壳的设置。具体来说,为了使解码按预期工作,您的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和终端中设置正确区域设置的详细信息,请查看以下问题。