Решение ошибки SyntaxError: Non-ASCII character в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы избавиться от SyntaxError, возникающей вследствие наличия не-ASCII символов в файле, добавьте в его начало строку # -*- coding: utf-8 -*-
. Это позволит интерпретатору Python воспринимать файл в кодировке UTF-8, которая включает ASCII и множество других символов.
# -*- coding: utf-8 -*-
Тайна не-ASCII символов
По умолчанию Python интерпретирует скрипты как ASCII-файлы. Встретив не-ASCII символ, например 'é' или последовательность \xe2
, Python столкнется с SyntaxError, так как он не знает, как обработать эти символы. Это можно сравнить с нахождением страницы, написанной азбукой Морзе, посреди прозаической книги!
Как заставить Python понимать UTF-8
Верное решение — добавить в начало файла декларацию о кодировке UTF-8. Это позволит Python корректно интерпретировать как простые ASCII, так и особые символы.
# Обучение Python замечать эмодзи и особые символы через UTF-8!
# -*- coding: utf-8 -*-
Сохранение согласованности с UTF-8 в ходе работы
Настройте ваш текстовый редактор или IDE таким образом, чтобы они сохраняли и воспринимали файлы в кодировке UTF-8. Обычно эти опции доступны в настройках.
# Совет от программиста: настройте вашу IDE "говорить" на одном языке с вашим кодом!
Отслеживание незаметных не-ASCII символов
Не-ASCII символы могут непреднамеренно попасть в ваш код, в особенности при копировании из сети. Для выявления таких символов воспользуйтесь функцией поиска вашего редактора.
# Пора играть в детективов и отыскать этих скрытых не-ASCII непосредственно в коде!
Работа Python с Unicode
Python требует указание кодировки в файле для корректной работы с Unicode. Это обеспечивает глобальную совместимость разработки программного обеспечения и унификацию кода.
Визуализация
Сценарий в Python:
Вы написали текст на английском языке (📝) и добавили древние символы (🎭).
Ваш скрипт: 📝 + 🎭 = ❌
Ошибка: "SyntaxError: Не-ASCII символ '\xe2' в файле"
Что Python хотел бы:
**Без малознакомых символов, Python:**
📝 (Только английский/ASCII) = ✅
Но с декларацией UTF-8:
# -*- coding: utf-8 -*-
Python будет доволен:
📝 + 🎭 + 😊 (UTF-8) = ✅
Тогда Unicode, ASCII и Python мирно сосуществуют в мире UTF-8! 🌍🎉
Справляемся с распространенными проблемами кодировки
Копирование кода
При копировании кода с веб-страниц могут включаться не-ASCII символы, такие как кавычки или тире, которые могут выглядеть невинными, но не являются ASCII.
Определение не-ASCII символов
Для отыскания скрытых не-ASCII символов воспользуйтесь регулярными выражениями или инструментами для поиска и замены. Регулярное выражение [^\x00-\x7F]
поможет их обнаружить.
# Регулярные выражения не только забавная терминология для гиков, они также очень полезны!
Соответствие кодировки файла
Убедитесь, что кодировка файла соответствует той, которая указана в скрипте. Если файл в кодировке ISO-8859-1 (Латиница-1), а в скрипте указана кодировка UTF-8, это может привести к проблемам. Стремитесь к единообразию кодировки файлов.
Работа с Unicode в разных версиях Python
Python 3 более продвинут в обработке Unicode по сравнению с его предшественником и по умолчанию интерпретирует файлы как UTF-8. Но явное указание кодировки обеспечит безошибочное функционирование вашего кода.
# Донести до Python свои намерения бывает сложно, как объяснить маме шутку 🙃