这怎么可能?这是一个错误吗? (Python 2.7.12和Python 3.5.1中的行为相同。)
<textarea>
日元的shift-jis编码与反斜杠的ASCII编码相同,所以大概是相关的。但还是很奇怪!
答案 0 :(得分:0)
Shift_JIS的字符集在JIS(日本工业标准)中定义。 字符编码Shift_JIS将JIS X 0201用于半角字符集,将JIS X 0208用于全角字符集。
问题中的“反斜杠”表示ISO / IEC 8859-1(Latin-1)中的半角反斜杠,并表示为0x005C
。另一方面,JIS X 0201(半角字符集)不包含反斜杠(请参见https://en.wikipedia.org/wiki/JIS_X_0201)。它使用日元符号代替0x005C
中的反斜杠。许多日语应用程序(例如,日语环境中的Windows资源管理器)都使用日元符号来表示反斜杠,例如C:¥Windows
。
在这种情况下,代码的行为如下所示:
yen
在Unicode中是U+00A5
。yen.encode('shift-jis')
在0x005C
中是bytes
,因为¥
包含在Shift-JIS中,并且在其编码中是0x005C
。.decode('shift-jis')
将Unicode中的0x005C
转换为U+005C
(半角反斜杠),因为¥
等效于反斜杠。