在 Python 3 字符串文字中使用 UTF-8

Using UTF-8 in Python 3 string literals

提问人:faiuwle 提问时间:7/27/2023 最后编辑:tdelaneyfaiuwle 更新时间:7/27/2023 访问量:58

问:

我有一个正在编写的脚本,我需要将字符序列“Qä”打印到终端。我的终端正在使用 UTF-8 编码。我的文件在它的顶部,我认为这对于 Python 3 来说实际上不是必需的,但我把它放在那里以防它有任何不同。在代码中,我有类似的东西# -*- coding: utf-8 -*-

print("...Qä...")

这不会产生 Qä。相反,它产生 Q▒。

然后我试了一下

qa = "Qä".encode('utf-8')
print(f"...{qa}...")

这也不会产生 Qä。它产生“Q\xc3\xa4”。

我也试过了

qa = u"Qä"
print(f"...{qa}...")

这也产生了Q▒。

但是,我知道 Python 3 可以打开包含 UTF-8 的文件并正确使用内容,所以我创建了一个名为 qa.txt 的文件,将 Qä 粘贴到其中,然后使用

with open("qa.txt") as qa_file:
    qa = qa_file.read().strip()
print(f"...{qa}...")

这行得通。但是,我必须创建此文件才能打印此字符串,这真是太愚蠢了。如何将此文本作为字符串文本放入代码中?

这个问题不是询问 Python 2.7 的问题的重复,我没有使用 Python 2.7。

python unicode utf-8 git-bash python-unicode

评论

0赞 user2357112 7/27/2023
@Barmar:这个复制目标是专门针对 Python 2 的。这是一个 Python 3 问题。
0赞 Barmar 7/27/2023
我怀疑这实际上是终端模拟器问题。您的第一个代码在 Mac 终端窗口中对我有用。
2赞 tdelaney 7/27/2023
和两者都是“utf-8”吗?sys.stdout.encodingsys.getdefaultencoding()
1赞 faiuwle 7/27/2023
视窗 10。我在控制台上使用 Git Bash,它有一个选项菜单,您可以在其中设置编码,并且我已经确认它设置为 UTF-8。带有 just 的新文件也不起作用。print("ä")
1赞 user2357112 7/27/2023
sys.stdout.reconfigure(encoding='utf-8')可能会有所帮助。docs.python.org/3/library/io.html#io.TextIOWrapper.reconfigure不过,我不确定首先是什么导致了这种情况。

答:

3赞 user2357112 7/27/2023 #1

你在 Windows 上使用的是 Git Bash。在 Windows 上,除非 stdio 连接到标准的 Windows 控制台(我认为 Git Bash 不算),否则 Python 默认将标准流默认为 .您的终端设置为需要 UTF-8,而不是 CP1252。您可以使用以下命令将标准输出流重新配置为 UTF-8'cp1252'

sys.stdout.reconfigure(encoding='utf-8')

同样,对于 stdin 和 stderr,或者您可以将 PYTHONIOENCODING 环境变量设置为 在运行 Python 之前更改默认的 stdin/stdout/stderr 编码。utf-8