Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3.x:确保字符串已准备好打印_Python_Encoding - Fatal编程技术网

Python3.x:确保字符串已准备好打印

Python3.x:确保字符串已准备好打印,python,encoding,Python,Encoding,今天,当我在文件或标准输出中写入大量文本时,这让我抓狂。我经常收到关于坏字符的错误消息。下面是一个简化的测试用例: 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'

今天,当我在文件或标准输出中写入大量文本时,这让我抓狂。我经常收到关于坏字符的错误消息。下面是一个简化的测试用例:

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>
win32上的Python 3.4.0b2(v3.4.0b2:ba32913eb13e,2014年1月5日,16:13:26)[MSC v.1600 64位(AMD64)] 有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。 >>>x='\x92' >>>打印(x) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“C:\Python34\Lib\encodings\cp437.py”,第19行,编码 返回codecs.charmap\u encode(输入、自身错误、编码\u映射)[0] UnicodeEncodeError:“charmap”编解码器无法对位置0中的字符“\x92”进行编码:字符映射到
我有一大块文字。我想把它全部打印出来或保存到文件中,但不会出现这个错误。可能吗?我的首选解决方案是将这个恼人的字符(还有更多吗?)保存到文件中,但如果有一种很好的过滤方法,那也很好(我知道如何过滤单个字符,但我不知道
'\x92'
是否有一堆类似的字符也需要过滤。)

围绕
sys.stdout
创建一个
codecs.StreamWriter
,它使用
反斜杠替换
错误处理程序,并将其作为
print()
文件
参数传递,上述代码片段在Python 3.3.3中不返回错误。这可能是配置问题或Python 3.4中的错误。0@StefanoSanfilippo:您的控制台设置为CP437吗?@IgnacioVazquez Abrams不,我的控制台设置为UTF8。也许问题就在那里。@StefanoSanfilippo:的确如此。仅当您尝试打印无法编码到控制台字符集中的字符时,此错误才会显示。我不知道如何使用
反斜杠替换
错误处理程序。呃,您将其传递给
StreamWriter
构造函数,就像文档中所说的那样。我如何处理我创建的
StreamWriter
呢?什么意思?让它“环绕”
sys.stdout
?对不起,我不够聪明,无法完成你的想法。