Python decode()不起作用 - 但仅限于Windows

时间:2012-12-22 13:28:22

标签: python character-encoding python-3.x decode

好的......真的很简单。我有一个(非常简单的)脚本从URL获取数据,然后对其进行解码(如果它可以工作,我将在以后使用它。)

rsp=urllib.request.urlopen(myurl)
print(rsp.read().decode("cp1255"))

当我执行此操作时,我正在

 File "C:\Program Files\Python32\lib\encodings\cp1252.py", line 19, in encode 
 return codecs.charmap_encode(input,self.errors,encoding_table)[0]
 UnicodeEncodeError: 'charmap' codec can't encode characters in position

但这种情况正在发生,仅限于Windows !!!

我有一台Linux机器(Ubuntu 12.10,喜欢它)相同的IDE(eclipse)相同的python版本(3.2.3)相同的脚本,它工作得很好。我得到了所有文本,它是可读的和可处理的。 我检查了目录 - cp1255存在。我试图用“cp1252”替换“cp1255” - 它有效,但编码后的文字是乱码。

我在这里遗漏了什么吗?我在两个项目中都获得了相同的设置,但它目前仅适用于Linux。

1 个答案:

答案 0 :(得分:1)

正如错误消息告诉您的那样,问题根本不在于decode()。您遇到的问题是encode()。 Python无法直接向您的终端发送unicode,它必须使用终端声称支持的任何编码进行编码。

如果您在Windows上运行,那么您可能正在命令窗口中运行。在命令提示符下键入chcp,检查您正在使用的代码页;在我的系统上显示我正在使用代码页850,但我认为从错误中你的命令提示符是cp1252。您尝试打印的文本必须包含无法使用命令提示符的代码页进行编码的字符。

如果print仅用于调试,那么您可以尝试:

print(repr(rsp.read().decode("cp1255")))

看看是否有帮助。

或者,在运行脚本之前,使用chcp 1255将命令提示符设置为与数据相同的代码页,或使用chcp 65001将命令提示符设置为使用utf-8。不要忘记检查您使用的字体是否支持希伯来字符。