Печать символов Юникода в Python 3.6.5 - PullRequest
0 голосов
/ 03 июля 2018

Я использую PyDev в Eclipse на Windows для написания кода на Python 3.6.5. Я получаю сообщение об ошибке при выполнении этой единственной строки кода:

print("•")

Это ошибка, которую я получаю:

SyntaxError: Non-UTF-8 code starting with '\x95' in file C:\Users\short\workspace\Python Test 4\src\foo.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

Я думал, что Python 3.6 должен был сделать кодировку UTF-8 по умолчанию. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Проблема не в Python, а в вашем текстовом редакторе. Python по умолчанию считывает ваш файл как UTF-8, но так как ваш файл не является UTF-8, это терпит неудачу.

Если вы редактируете файл как cp1252 или аналогичные устаревшие кодовые страницы Windows, кодируется в \x95. Это недопустимый код UTF-8, потому что символы UTF-8 всегда либо меньше 0x80, либо начальный байт> = 0xC0. Отсюда и ошибка. (UTF-8 для равен \xe2\x80\xa2.)


Если вы как-то настроили Eclipse для редактирования исходного кода, используя кодировку по умолчанию вашей системы вместо UTF-8, исправьте это. В этом вопросе показано, как изменить настройки по умолчанию для разных языков для различных версий Eclipse, но короткая версия такова: Preferences | General | Workspace | Text File Encoding или Preferences | General | Editors | Text editors. Где-то под Editor также есть переопределения для каждого языка, и вы также можете установить переопределение для каждого проекта.


Другая возможность: Eclipse по умолчанию автоматически определяет кодировку для существующих файлов и сохраняет ее, вместо использования собственной предпочтительной кодировки. Поскольку вы работаете в Windows, вполне возможно, что вы изначально создали файл с помощью Блокнота (или другого редактора Windows, не предназначенного для программирования), который по умолчанию соответствует "кодовой странице OEM" вашей системы.

Если это так, не делайте этого. Никогда не трогайте исходный код Блокнотом. В то время как вы можете заставить Notepad экспортировать файлы в формате UTF-8, это неприятно (и тогда у вас просто возникнут проблемы с префиксами \xef\xbb\xbf UTF-8-SIG во всех ваших файлах). Если вы не хотите использовать Eclipse для редактирования какой-либо причины, подойдет практически любой другой бесплатный текстовый редактор.

Если это проблема, чтобы ее исправить, вам просто нужно вручную сохранить файл в формате UTF-8 один раз, и с этого момента он автоматически определится как UTF-8 и будет работать правильно.


В качестве альтернативы, вы могли бы оставить файл в cp1252 или в другом месте и использовать декларацию кодирования PEP-263, как указано в сообщении об ошибке, чтобы переопределить UTF-8 по умолчанию. Но вы будете намного счастливее, переходя на UTF-8.

0 голосов
/ 03 июля 2018

Ваш исходный файл не в формате UTF-8.

>>> '•'.encode('cp1251')
b'\x95'

Прочтите инструкции в статье, на которую есть ссылка в сообщении об ошибке, и укажите правильную кодировку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...