在Shift-JIS中编码/解码后,¥字符转换为\

时间:2016-10-13 14:37:53

标签: python encoding

这怎么可能?这是一个错误吗? (Python 2.7.12和Python 3.5.1中的行为相同。)

<textarea>

日元的shift-jis编码与反斜杠的ASCII编码相同,所以大概是相关的。但还是很奇怪!

1 个答案:

答案 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(半角反斜杠),因为¥等效于反斜杠。