首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解码shift-jis:“非法的多字节序列”

解码shift-jis:“非法的多字节序列”
EN

Stack Overflow用户
提问于 2011-07-18 13:44:06
回答 2查看 14.4K关注 0票数 7

我正在尝试解码一个shift-jis编码的字符串,如下所示:

代码语言:javascript
复制
string.decode('shift-jis').encode('utf-8')

以便能够在我的程序中查看它。

当我在十六进制"0x87 0x54“和"0x87 0x55”中遇到两个shift-jis字符时,我得到这个错误:

代码语言:javascript
复制
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。我张贴了它们的十六进制值。)

EN

回答 2

Stack Overflow用户

发布于 2011-07-18 14:02:05

存在多个版本的Shift JIS。shift_jis编解码器是JIS X 0208,而表是JIS X 0213,对应于shift_jisx0213编解码器。

代码语言:javascript
复制
>>> u'⑲⑳Ⅰ'.encode('shift_jisx0213')
'\x87R\x87S\x87T'
票数 9
EN

Stack Overflow用户

发布于 2019-03-22 19:59:14

您永远不应该使用shift_jisx0213。它从未被用于实际的生产目的。Windows无法处理它。字符集JISX0213在大多数情况下与Unicode一起使用,但不与Shift_JIS编码一起使用。

使用'cp932' (在Python 3中)。

./sjis.txt包含

代码语言:javascript
复制
5c  7e  87  52  87  53  87  54  87  8a  fa  b1  fb  50  fb  fc

(它们是在Windows10上保存的~1920个Ⅰ㈱﨑瀨髙)

代码语言:javascript
复制
>>> 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()
'\\~⑲⑳Ⅰ㈱﨑瀨髙'

shift_jisx0213错误地解码了符号和最后三个汉字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6729016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档