Ошибка синтаксиса Python: не-UTF-8 - PullRequest
0 голосов
/ 29 сентября 2019

Я преобразовал свой скрипт 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 устранило проблему, и теперь она работает правильно.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Python 3 использует UTF-8 в качестве кодировки по умолчанию.Это упростит коды, которые вы получаете из Интернета (и других пакетов).\xcf в UTF-8 действует только в том случае, если предыдущий байт имеет предопределенные значения, а это не так: Non-UTF8 code starting означает, что это недопустимое начало (первый байт) кодирования кодовой точки UTF8.

Как вы видите в комментарии, вы можете конвертировать файл в UTF-8, много раз вы можете игнорировать начальную кодировку (часто такие ошибки из комментариев, например, имя автора).вы можете преобразовать его, например, в опции Saving As в исходном редакторе.

В качестве альтернативы вы можете указать кодировку в первых нескольких строках вашего кода, см. PEP-263 о том, как это сделать.Примечание: Python имеет жестко закодированные байтовые строки для проверки [потому что он не имеет представления о кодировке], поэтому попробуйте скопировать именно такую ​​строку, как в таком документе.Я думаю, что такая строка # -*- coding: latin-1 -*- должна быть в порядке, но это может неправильно интерпретировать некоторые символы, поэтому протестируйте свою программу.Если вы не знаете исходную кодировку, проще будет преобразовать исходный код (потому что в любом случае вы должны проверить все строки в исходном коде и проверить, угадали ли вы правильную кодировку).

0 голосов
/ 29 сентября 2019

Если у вас есть функция «open ()» для чтения файла, убедитесь, что вы используете

#example using encoding, in Notepad++, you can search open syntax by going "Find"
file = open('file.py', encoding='utf-8')

или если у вас есть какие-либо ошибки из-за других, вы можете использовать команду, подобную этой

import sys
reload(sys) # if you don't have setdefaultencoding, you can try do this
sys.setdefaultencoding('UTF8')
...