在Python 3中将ascii字符输出到标准输出
我有一个名为“xxx.py”的文件,如下所示:在Python 3中将ascii字符输出到标准输出,python,windows,python-3.x,unicode,character-encoding,Python,Windows,Python 3.x,Unicode,Character Encoding,我有一个名为“xxx.py”的文件,如下所示: print("a simple string") 当我像这样运行时(Python 3): 我得到一个unicode文件 我想要一个ascii文件 如果试图打印非ascii字符,我不介意是否引发异常 我可以对输出ascii字符的代码进行什么简单的更改 我的搜索结果显示,对于这样一个简单的问题来说,解决方案似乎过于冗长 [编辑]报告我从设置LC_CTYPE中学到的知识: 我在Windows7上运行 在powershell命令行上运行时,我得到一个un
print("a simple string")
当我像这样运行时(Python 3):
我得到一个unicode文件
我想要一个ascii文件
如果试图打印非ascii字符,我不介意是否引发异常
我可以对输出ascii字符的代码进行什么简单的更改
我的搜索结果显示,对于这样一个简单的问题来说,解决方案似乎过于冗长
[编辑]报告我从设置LC_CTYPE中学到的知识:
我在Windows7上运行
stdout
编码由执行python脚本的环境定义,例如:
$ python -c "import sys; print(sys.stdout.encoding)"
UTF-8
$ LC_CTYPE=ascii python -c "import sys; print(sys.stdout.encoding)"
US-ASCII
在运行脚本之前,请尝试调整环境。您可以通过设置环境变量来强制Python的编码值。如何定义
printf()?标准编码很可能由执行的shell的区域设置定义xxx.py
。您可以尝试LC\u TYPE=en\u us python xxx.py>atextfile.txt
。检查sys.stdout.encoding的值
所有ASCII文件都是Unicode(特别是UTF-8)文件。您要更改的atextfile.txt
到底是什么内容?它是否采用非ASCII兼容的Unicode编码,如UTF-16?什么是print(sys.stdout)
?什么是打印(打开('atextfile.txt','rb').read())?什么是打印(locale.getpreferredencoding())?请不要将使用utf-16字符编码的文本称为“unicode文件”。Unicode字符串在Python中没有关联的字符编码。您可以使用多种编码将同一Unicode字符串编码为字节。磁盘上的文件是一个字节流,有时可以通过适当的字符编码解释为文本。设置LC\u CTYPE
——或任何LC\u
环境变量——都不会影响Windows上的任何内容。Windows区域设置是在控制面板中通过API调用而不是环境变量配置的。无论是CRT代码还是CPython的代码中都没有在Windows上查看这些环境变量的内容。当stdout是tty时,stdout编码要么来自GetConsoleOutputCP()
,要么默认为locale.getpreferredencoding()
,最终从系统ANSI代码页GetACP()
获取编码。
$ python -c "import sys; print(sys.stdout.encoding)"
UTF-8
$ LC_CTYPE=ascii python -c "import sys; print(sys.stdout.encoding)"
US-ASCII