【发布时间】:2020-07-26 11:33:58
【问题描述】:
我正在尝试从包含 utf-8 字符的 Python 3 HTML 打印。下面的程序适用于 Python 2 和 Mac 和 Linux 上的 Python 3。但在 Windows 上,我必须删除行 <meta charset='UTF-8'> 才能正确显示 utf 字符。我尝试使用 # -- coding: UTF-8 -- 但这也无济于事。
这是 Python 3 中的错误吗?
print( "Content-type: text/html;\n")
print( """<!DOCTYPE html>
<html><head>
<meta charset="UTF-8">
</head><body>
<p>¡Hola Señor Müller!</p>
</body></html>
""")
【问题讨论】:
-
print默认将文本写入sys.stdout,默认使用locale.getpreferredencoding()返回的编码对文本进行编码。在 Windows 中,这是进程的活动代码页,默认为系统编码,默认为系统区域设置的 ANSI 代码页。在 Windows 10 中,进程的活动代码页可以在应用程序清单中设置为 UTF-8,但 python.exe 不会设置此设置。 Windows 10 还允许将系统编码设置为 UTF-8,但默认情况下未启用。因此,首选编码可能是您系统区域设置的 ANSI 代码页。 -
谢谢。最好的解决方法是什么?
-
打印到什么地方?终端使用很重要。例如,将上面的内容粘贴到运行 Python 3 的
cmd.exe中效果很好。它是 CGI 脚本吗?环境很重要。是失败还是打印不正确?追溯? -
这个程序被传递到 Apache 网络服务器执行。它有效,但 utf 字符显示为问号
-
@MarkTolonen,我假设 stdout 被重定向到文件或管道,而不是控制台(即以 python.exe 作为客户端的 conhost.exe - 而不是 cmd.exe)。不太可能有人将 HTML 写入控制台,只是为了将其复制并粘贴到文件中以在 Web 浏览器中显示。
标签: python-3.x windows utf-8