我需要输出一些字符串(到标准输出),因为 Windows 控制台在 cp437 中工作,如果字符串包含 cp437 之外的任何字符,则会引发异常。
我解决了这个问题
encoding=sys.stdout.encoding
pathstr = path.encode(encoding,errors="replace").decode(encoding)
print(pathstr)
其中path
是我想要输出的str
。我可以接受用“?”替换的字符
这看起来不太好,因为它会转换为字节数组并返回为 str。
是否有更好的方法来实现这一目标?
我对 python 还很陌生(可能需要一周),并且我正在使用 Win7 32 位和 cpython 3.3
最佳答案
This doesn't seem good because it converts to a byte array and back to a str.
如果要将原始字节写入流,请使用.buffer
:
pathbytes= path.encode(encoding, errors= 'replace')
sys.stdout.buffer.write(pathbytes)
...哦,那一天issue 1602到了某事,我们就可以避免 Windows 命令提示符的 Unicode 恐怖......
关于python - python 中字符集之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257893/