2012-12-22 38 views
-1

好的...這很簡單。我有一個(非常簡單的)腳本,它可以從一個url中獲取數據,然後對其進行解碼(如果它能工作,我會稍後使用它)。Python解碼()不起作用 - 但只能在windows下運行

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(日食)相同的Python版本(3.2.3)相同的腳本,它很好地工作。我得到所有的文本,它是可讀和可處理的。 我檢查了目錄 - cp1255存在。我試圖用「cp1252」替換「cp1255」 - 它可以工作,但編碼文本是亂碼。

我在這裏錯過了什麼嗎?我在兩個項目中都獲得了相同的設置,但它目前只在Linux上工作。

+0

什麼是確切的URL? –

+0

如何重現?我猜你的數據在不同的操作系統上有所不同......先自己驗證一下。我對你的主張的信任接近於零。 –

+0

問題在於打印行。如果我只解碼,它的工作正常。所以是的,這可能是一個操作系統問題 – donald

回答

1

由於錯誤信息告訴你,問題根本不在decode()。您遇到的問題是encode()。 Python不能直接發送unicode到您的終端,它必須使用您的終端聲稱支持的任何編碼進行編碼。

如果您在Windows上運行,那麼您可能正在命令窗口中運行。通過在命令提示符處鍵入chcp來檢查您正在使用的代碼頁;在我的系統上顯示我正在使用代碼頁850,但我認爲從錯誤您的命令提示符是cp1252。您嘗試打印的文本必須包含無法使用命令提示符的代碼頁進行編碼的字符。

如果print僅僅是進行調試,那麼你可以嘗試:

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

,看看有沒有什麼幫助。

運行腳本使用chcp 1255到命令提示符設置爲相同的代碼頁爲您的數據或者之前,或者chcp 65001設置您的命令提示符下使用UTF-8。不要忘記檢查您使用的字體是否支持希伯來字符。

+0

我正在使用eclipse控制檯窗口,而不是命令行,不幸的是,你的建議不起作用,或者我失去了一些東西。 但是,使用Python shell時,一切正常,所以它似乎是一個Windows命令行問題。沒什麼可說的 - 我會把它輸出到一個文件,所以實際的目標已經實現了,但是現在,這個問題仍然沒有得到解答 – donald

+0

print(sys.stdout.encoding)是什麼意思? – Duncan

+0

它說在日食控制檯上的Cp1252 – donald

相關問題