在Python 3中将ascii字符输出到标准输出

在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

我有一个名为“xxx.py”的文件,如下所示:

print("a simple string")
当我像这样运行时(Python 3):

我得到一个unicode文件

我想要一个ascii文件

如果试图打印非ascii字符,我不介意是否引发异常

我可以对输出ascii字符的代码进行什么简单的更改

我的搜索结果显示,对于这样一个简单的问题来说,解决方案似乎过于冗长

[编辑]报告我从设置LC_CTYPE中学到的知识:

我在Windows7上运行

  • 在powershell命令行上运行时,我得到一个unicode文件(两个字节/字符)
  • 在没有LC_CTYPE集的.bat文件中运行时,我会得到一个ascii文件(可以是@jwodder指出的utf-8)
  • 当在设置了LC_CTYPE=ascii的.bat文件中运行时,我可能会得到一个ascii文件(1字节/字符)

  • 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