我试图从我的python代码中执行.py程序,但是非ASCII字符在打印和处理时表现异常。
module1.py:
test = "áéíóúabcdefgçë"
print(test)
Run Code Online (Sandbox Code Playgroud)
主要代码:
exec(open("module1.py").read(), globals())
Run Code Online (Sandbox Code Playgroud)
我要打印,áéíóúabcdefgçë
但要打印áéÃóúabcdefgçë
。我尝试过的所有非ASCII字符都会发生这种情况。
我正在使用Python 3.7和Windows 10。
单独运行module1.py不会产生此错误,但是我想使用exec()或具有大致相同功能的其他东西来运行程序。
我找到了解决此问题的方法。Python open
假设使用的编码不是UTF-8。将主代码更改为以下代码可以解决我的计算机(python 3.7和Windows 10)上的问题:
exec(open("module1.py", encoding="utf-8").read(),globals())
Run Code Online (Sandbox Code Playgroud)
感谢@jjramsey提供其他信息:
根据open()的Python文档,“默认编码取决于平台(无论locale.getpreferredencoding()返回什么)。”
对我来说,如果我运行以下检查:
import locale
print(locale.getpreferredencoding())
Run Code Online (Sandbox Code Playgroud)
我得到cp1252
,但不是UTF-8
,因此open()
会导致我们在此问题中看到的问题,除非我们指定编码。