0

我正在从数据库中读取 SQLASCII 字符串,并且遇到了一些基于我声明的 big5 编码未正确解码的字节。下面是简化的问题。python的big 5编码表似乎不知道如何解码这两个字符。据我所知(我不是专家),这些都是有效的汉字,因为我可以使用 Notepad++ 并更改编码以将它们显示为汉字。我将它们在 Notepad++ 中的样子与这个网站进行了比较,字符匹配,所以我假设它们是 big5 编码表的有效字节。

http://ash.jp/code/cn/big5tbl.htm

by = b'\xBD\xC6\xBB\x73'
print(by,len(by))
print(by.decode('big5'))

b'\xbd\xc6\xbbs' 4

回溯(最后一次调用):文件“qtest1.py”,第 15 行,in print(by.decode('big5')) 文件“C:\Python32\lib\encodings\cp1252.py”,第 19 行,in编码返回 codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-1: character maps to

非常感谢任何帮助...

4

1 回答 1

0

仔细看:那是UnicodeEncodeError- 它无法编码,而不是解码。另请查看它正在使用的模块:...\lib\encodings\cp1252.py. 所以有些东西正试图将文本编码为 cp1252。

事实上,解码为 big5 工作正常 - 我可以运行您的确切代码并获取中文字符[1]。问题是您的终端 - Python 尝试使用您的 Windows 代码页 (cp1252) 对中文字符进行编码,但它不知道如何处理它们。您应该能够将它们写入以合适的编码(UTF-8 或 big5)打开的文件,或者对它们执行任何您需要的操作,只是不要将它们写入终端。

[1] 大多数 Linux 终端使用 UTF-8,因此任何字符都可以使用。

于 2012-04-13T17:09:58.760 回答