2014-01-26 22 views
2

這是在寫入大量文本到文件或標準輸出的過程中,今天讓我發瘋的東西。我經常會收到有關錯誤字符的錯誤消息。這裏有一個簡化的測試用例:Python 3.x:確保字符串已準備好打印

Python 3.4.0b2 (v3.4.0b2:ba32913eb13e, Jan 5 2014, 16:13:26) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> x='\x92' 
>>> print(x) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python34\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 '\x92' in position 0: character maps to <undefined> 

我有一大塊文字。我想打印全部或保存到文件,但沒有得到這個錯誤。可能嗎?我最喜歡的解決方案是保存這個煩人的字符(還有更多?),但如果有一個很好的方法來過濾它,那也會很好(我知道如何過濾單個字符,但我不知道知道'\x92'是否有一堆類似的字符,它也需要被過濾掉。)

+0

上面的代碼片段在Python 3.3.3中沒有返回錯誤。也許這是一個配置問題或Python中的錯誤3.4.0 –

+0

@StefanoSanfilippo:你的控制檯是否設置爲CP437? –

+0

@ IgnacioVazquez-Abrams不,我的控制檯設置爲UTF8。問題可能在那裏。 –

回答

0

創建codecs.StreamWriter各地sys.stdout使用了backslashreplace錯誤處理和傳遞爲print()file說法。

+0

我不知道如何使用'backslashreplace'錯誤處理程序。 –

+0

呃,你把它傳遞給'StreamWriter'構造函數,就像文檔說的一樣。 –

+0

我該如何處理創建的StreamWriter?你是什​​麼意思「周圍」'sys.stdout'?對不起,我不夠聰明來完成你的想法。 –