这怎麽可能?这是个bug吗?( Python 2.7.12和Python 3.5.1中的行为相同。)
In [1]: yen = u'\u00A5'
In [2]: print(yen)
¥
In [3]: yen_after_encoding_decoding = yen.encode('shift-jis').decode('shift-jis')
In [4]: print(yen_after_encoding_decoding)
\
In [5]: yen
Out[5]: '¥'
In [6]: yen_after_encoding_decoding
Out[6]: '\\'
In [7]:表示yen的shift-jis编码与表示反斜杠的ASCII编码相同,因此这可能是相关的。但还是很奇怪!
发布于 2020-07-15 00:30:14
Shift_JIS的字符集是在日本工业标准中定义的。字符编码Shift_JIS使用JISX0201表示半角字符集,使用JISX0208表示全角字符集。
问题中的“反斜杠”是指ISO/IEC8859-1(拉丁文-1)中的半角反斜杠,表示为0x005C。另一方面,JISX0201(半角字符集)不包含反斜杠(参见https://en.wikipedia.org/wiki/JIS_X_0201)。它在0x005C中使用了日元符号而不是反斜杠。许多日语应用程序(例如日语区域设置中的Windows资源管理器)使用日语符号作为反斜杠的等价物,如C:¥Windows。
在这种情况下,代码的行为如下所示:
yen在Unicode.yen.encode('shift-jis')中是U+00A5,在bytes中是0x005C,因为¥包含在Shift- 0x005C中,并且在它的encoding..decode('shift-jis')中是0x005C将0x005C转换为Unicode中的U+005C (半角反斜杠),因为¥等同于反斜杠。https://stackoverflow.com/questions/40024053
复制相似问题