2014-01-26 21 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'?对不起,我不够聪明来完成你的想法。 –