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

4
我有一个名为'xxx.py'的文件,内容如下:
print("a simple string")

当我像这样运行它(Python 3):

python xxx.py >atextfile.txt

我得到了一个Unicode文件。

我想要一个ASCII文件。

如果尝试打印非ASCII字符会抛出异常,我不介意。

有什么简单的更改可以让我的代码输出ASCII字符吗?

我的搜索结果都似乎对于这个简单的问题来说太冗长了。

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

我正在运行Windows 7。

  1. 在PowerShell命令行上运行时,我得到了一个Unicode文件(每个字符两个字节)。
  2. 在没有设置LC_CTYPE的.bat文件中运行时,我得到了一个ASCII文件(可能是UTF-8,如@jwodder所指出的那样)。
  3. 在设置了LC_CTYPE=ascii的.bat文件中运行时,我得到了一个可能是ASCII的文件(每个字符1个字节)。

1
printf() 是如何定义的?标准编码可能由执行 xxx.py 的 shell 区域设置定义。您可以尝试 LC_TYPE=en_us python xxx.py > atextfile.txt。请检查 sys.stdout.encoding 的值。 - AChampion
所有的ASCII文件都是Unicode(具体来说是UTF-8)文件。你想要改变atextfile.txt文件的哪一部分呢?它是否使用了不兼容ASCII的Unicode编码,例如UTF-16? - jwodder
1
print(sys.stdout)是什么?print(open('atextfile.txt', 'rb').read())是什么?print(locale.getpreferredencoding())是什么?请不要将使用utf-16字符编码的文本文件称为“Unicode文件”。在Python中,Unicode字符串没有关联的字符编码——您可以使用多个编码将相同的Unicode字符串编码为字节。磁盘上的文件是一系列字节流,有时可以根据适当的字符编码将其解释为文本。 - jfs
1
设置LC_CTYPE或任何LC_环境变量在Windows上会影响任何内容都没有意义。Windows语言环境是通过控制面板和API调用进行配置的,而不是通过环境变量。在Windows上,CRT代码或CPython代码中没有任何东西会查看这些环境变量。stdout编码要么来自GetConsoleOutputCP()(当stdout是tty时),要么默认为locale.getpreferredencoding(),最终从GetACP()(系统ANSI代码页)获取编码。 - Eryk Sun
1个回答

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

在运行脚本之前,请尝试调整您的环境。您可以通过设置PYTHONIOENCODING 环境变量来强制指定 Python 的编码值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接