-1

好的......这真的很简单。我有一个(非常简单的)脚本,它从 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 上运行。

4

1 回答 1

1

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

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

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

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

看看是否有帮助。

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

于 2012-12-22T15:17:39.213 回答