我正在尝试解码shift-jis编码的字符串,如下所示:
string.decode('shift-jis').encode('utf-8')
能够在我的程序中查看它。
当我遇到2个shift-jis字符时,在十六进制“0x87 0x54”和“0x87 0x55”中,我收到此错误:
UnicodeDecodeError: 'shift_jis' codec can't decode bytes in position 12-13: illegal multibyte sequence
但我确定它们是有效的shift-jis字符:http://www.rikai.com/library/kanjitables/kanji_codes.sjis.shtml
我还注意到这些字符在我的shift-jis文本编辑器中显示为黑盒子,这意味着它们无法被识别。因此,这两个字符有一些特殊之处,使我的编辑器和Python解码器失败。帮助
(抱歉,我无法发布示例字符串,因为当这些字符存在时,它不会从那里开始添加到剪贴板,也会自动转换为unicode。虽然我发布了它们的十六进制值。 )
答案 0 :(得分:8)
存在多个版本的Shift JIS。 shift_jis
编解码器为JIS X 0208,而该表为JIS X 0213,对应于shift_jisx0213
编解码器。
>>> u'⑲⑳Ⅰ'.encode('shift_jisx0213')
'\x87R\x87S\x87T'
答案 1 :(得分:0)
Shift_JISx0213在现实世界中未使用。它仅用于演示自身,恕我直言。 Windows无法处理它。在大多数情况下,JIS X 0213字符集与Unicode一起使用,但Shift_JIS不使用。
使用'cp932'
(在Python 3中)。
./ sjis.txt包含
5c 7e 87 52 87 53 87 54 87 8a fa b1 fb 50 fb fc
(它们是Windows 10中的\〜⑲⑳Ⅰ㈱﨑濑髙保存)
>>> import codecs
>>> codecs.open('sjis.txt',"rb",'shift_jis').read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/codecs.py", line 700, in read
return self.reader.read(size)
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 2: illegal multibyte sequence
>>> codecs.open('sjis.txt',"rb",'shift_jisx0213').read()
'¥‾⑲⑳Ⅰ㈱郫鍚騠'
>>> codecs.open('sjis.txt',"rb",'cp932').read()
'\\~⑲⑳Ⅰ㈱﨑瀨髙'
符号和最后3个汉字的解释不同。