提问人:faiuwle 提问时间:7/27/2023 最后编辑:tdelaneyfaiuwle 更新时间:7/27/2023 访问量:58
在 Python 3 字符串文字中使用 UTF-8
Using UTF-8 in Python 3 string literals
问:
我有一个正在编写的脚本,我需要将字符序列“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。
答:
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
评论
sys.stdout.encoding
sys.getdefaultencoding()
print("ä")
sys.stdout.reconfigure(encoding='utf-8')
可能会有所帮助。docs.python.org/3/library/io.html#io.TextIOWrapper.reconfigure不过,我不确定首先是什么导致了这种情况。