Python语法错误:非UTF-8

3
我将我的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 -*-

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

不过,我确实从Excel文件中复制了一些文本,但我并不知道其中是否有特殊符号。

由于脚本大约有800行,所以有没有一种方式可以确定问题而不需要逐行手动扫描脚本?

编辑

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


1
也许看看你是否有这些字符:https://tripleee.github.io/8bit/#cf - tripleee
@tripleee 那个命令没有输出错误... 到目前为止,我进行的每一个检查都告诉我它全部是UTF-8。 - DDiran
请问您能否添加一个 py2app/dist/myapp.app/Contents/MacOS/myapp 的十六进制转储吗?(MacOS 有一个 xxd 命令;如果输出过多,可以进行修剪。) - tripleee
@tripleee 我得到的唯一错误是上面发布的那个。我也已经将/usr/bin/python更改为指向Python3,但仍然无法工作。 - DDiran
让我们在聊天室里继续这个讨论 - DDiran
显示剩余8条评论
1个回答

2

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

正如您在注释中看到的那样,您可以将文件转换为UTF-8,很多时候您可以忽略初始编码(通常此类错误来自注释,例如作者姓名)。您可以将其转换为原始编辑器中的保存为选项。

作为另一种方法,您可以在代码的前几行指定编码,请参见PEP-263以了解如何执行此操作。注意:Python已经硬编码了字节字符串进行检查[因为它没有编码的概念],因此请尽量按照该文档中的字符串粘贴。我认为这样的行# -*- coding: latin-1 -*-应该没问题,但是这可能会误解一些字符,所以请测试您的程序。如果您不知道原始编码,则更容易的方法是转换原始源代码(因为您无论如何都应该检查源代码中的所有字符串,并检查是否猜对了正确的编码)。


我添加了这个并且它有效,我说西班牙语并使用VSCode编辑器。`#!/usr/bin/python

-- coding: latin-1 --`

- Gonen09

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接