2013-02-24 22 views
4

在我的代碼我不斷收到這個錯誤...Python除UnicodeError外?

UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 390: character maps to <undefined> 

我試圖把一個除了UnicodeError和UnicodeEncodeError但沒有任何工程,問題是它的用戶輸入,所以我無法控制自己放什麼所以我需要的所有編碼錯誤顯示打印,上面寫着,而不是崩潰的程序錯誤...

try: 
    argslistcheck = argslist[0] 
    if argslistcheck[0:7] != "http://": 
     argslist[0] = "http://" + argslist[0] 
    with urllib.request.urlopen(argslist[0]) as url: 
     source = url.read() 
     source = str(source, "utf8") 
    except urllib.error.URLError: 
     print("Couln't connect") 
     source = "" 
    except UnicodeEncodeError: 
     print("There was an error encrypting...") 
     source = "" 

回溯:

Traceback (most recent call last): 
    ..... things leading up to error 
    File "C:\path", line 99, in grab print(source) 
    File "C:\Python33\lib\encodings\cp437.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_map)[0] 
UnicodeEncodeError: 'charmap' codec can't encode character '\u2013' in position 390: character maps to <undefined> 
+0

它更可能是您的程序的* output *導致錯誤; Unicode數據會自動編碼以匹配您的終端輸出編碼。你打印什麼或寫入文件?請包括該代碼和完整的追溯。 – 2013-02-24 21:27:59

+0

是的,它可以打印源文件或將其保存到txt文件中......它只在特定的網站上執行,比如如果我在我的網站上執行它,那麼它不會,但是如果我使用http:// test執行它。 com /那麼它會。我只是不想讓程序崩潰。 – TrevorPeyton 2013-02-24 21:32:33

+0

仔細觀察追蹤(最好與我們分享)。它告訴你*哪些操作失敗。 – 2013-02-24 21:34:08

回答

3

嘗試THI (): source = source.encode('UTF-8')

+0

這沒有奏效,我這樣編碼的原因是因爲我將它從字節改爲字符串。如果我這樣做,它會給我一個關於是一個字節的錯誤。 – TrevorPeyton 2013-02-24 21:46:48

4

您的打印失敗。您的Windows控制檯不支持打印UTF-8,您需要更改代碼頁:

chcp 65001 

這是一個Windows命令,而不是蟒蛇命令。您可能也需要切換字體,Lucida Sans Console是一種可處理更多字形的Unicode字體。

+0

有沒有任何編碼,但不會給我錯誤的字節? – TrevorPeyton 2013-02-24 21:48:32

+0

@TrevorPeyton:問題是您的輸入中包含的代碼點,您的默認代碼頁(437)不具有*任何編碼。 65001是UTF-8的MS代碼頁,它可*編碼所有的Unicode。 – 2013-02-24 21:51:46

+0

好的,我該如何更改代碼頁? – TrevorPeyton 2013-02-24 21:54:53