Python 语法错误 : Non-UTF-8

标签 python python-3.x encoding utf-8 py2app

我将我的 Python 脚本转换为 Mac.app(通过 py2app)。我尝试运行它并收到以下错误:

SyntaxError: Non-UTF-8 code starting with '\xcf' in file 
py2app/dist/myapp.app/Contents/MacOS/myapp on line 1, but no encoding declared; see 
http://python.org/dev/peps/pep-0263/ for details

我访问了 PEP 网站并将以下内容添加到脚本的前两行:

#!/usr/bin/python
# -*- coding: utf-8 -*-

我还将我的代码放入各种在线工具(例如 this one )中以检查是否有任何非 UTF-8 字符,但我没有遇到任何问题。

我确实从 Excel 文件中复制了一些文本,但是没有我知道的特殊符号。

脚本大约有 800 行,那么有没有一种方法可以在不涉及手动逐行扫描脚本的情况下识别问题?

编辑

不完全是修复,但将我的脚本转换为可执行文件而不是 .app 已经解决了问题,现在它可以正常运行。

最佳答案

Python 3 使用 UTF-8 作为默认编码。这简化了您从 Internet(和其他包)获得的代码。 UTF-8 中的 \xcf 只有在前面的字节具有预定义值时才有效,事实并非如此: Non-UTF8 code starting 意思是,它不是UTF8 代码点编码的有效开始(第一个字节)。

正如您在评论中看到的,您可能会将文件转换为 UTF-8,很多时候您可以忽略初始编码(通常此类错误来自评论,例如作者姓名)。你可以转换它,例如在原始编辑器的 Saving As 中的选项上。

作为替代方法,您可以在代码的前几行指定编码,请参阅 PEP-263关于如何去做。注意:Python 有硬编码的字节字符串来检查[因为它没有编码的概念],因此请尝试完全复制此类文档中的字符串。我认为这样的行 # -*- coding: latin-1 -*- 应该没问题,但这可能会误解某些字符,因此请测试您的程序。如果您不知道原始编码,更简单的方法是转换原始源(因为无论如何您都应该检查源代码中的所有字符串,并检查您是否猜到了正确的编码)。

关于Python 语法错误 : Non-UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154590/

相关文章:

python - 如何使用 sympy.printing.mathml 显示希腊字母

Python countlines - 目录和文件

python - 尝试添加无效/有效的输入系统

python - 如何使用事件触发的 lambda 从 S3 存储桶中获取最新的文件名或文件

python - 使用py eureka客户端进行微服务互通

python - 两条新线而不是一条

Python subprocess.Popen.wait() 即使发生错误也返回 0

python - Python readline()方法导致UnicodeDecodeError

python - 读取包含 pandas 数据帧的 csv 文件时出现编码错误

r - 编码问题: how to let console print "ć" instead of "c"?