Ошибка синтаксиса компиляции: не ASCII буквы в строке - PullRequest
8 голосов
/ 31 мая 2011

У меня есть файл Python, который содержит длинную строку HTML. Когда я компилирую и запускаю этот файл / скрипт, я получаю эту ошибку:

_SyntaxError: Non-ASCII character '\x92' in file   C:\Users...\GlobalVars.py on line 2509,   but no encoding declared; see http://www.python.org/peps/pep-0263.html for details_

Я следовал инструкциям и пошел на предложенный URL. Но поместить что-то подобное в начало моего скрипта все равно не получается:

#!/usr/bin/python
# -*- coding: latin-1 -*-

Как вы думаете, что я могу сделать, чтобы предотвратить возникновение этой ошибки компилятора?

Ответы [ 7 ]

8 голосов
/ 31 мая 2011

Во-первых, для предотвращения проблем, подобных той, которая указана в вопросе, вы не должны когда-либо использовать другую кодировку, чем utf-8 для исходного кода Python.

Это правильный заголовок для использования

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

Теперь вам нужно преобразовать файл из любой кодировки в utf-8, возможно, ваш текущий текстовый редактор сможет это сделать.

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

Кроме того, как вы можете видеть, Python пытается декодировать символ выше 128, используя ASCII (не latin-1), это должно завершиться неудачей. Я не уверен, почему это происходит, но мне даже наплевать, потому что есть гораздо лучший способ решить проблему.

3 голосов
/ 29 апреля 2012

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

1) Копироватьсвой код и вставьте его в Блокнот ++

2) Выберите Кодировка -> Кодировать в UTF-8

3) Выберите Вид -> Показать символ -> Показать все символы

Сейчасвам будет видно, какой символ вызывает проблему (будет виден x92).Замените / Удалите его, чтобы решить проблему.

3 голосов
/ 31 мая 2011

Он должен быть в верхней части скрипта с текстом, отличным от ASCII, и соответствовать фактической кодировке файла.\x92 - это CP1252, а не Latin-1.

2 голосов
/ 04 января 2013

Нашел это и надеюсь, что это поможет следующему человеку: http://www.sitepoint.com/forums/showthread.php?567734-Anyone-know-what-this-error-means

Кодовая точка 0x92 (десятичная дробь 146) - это правильная одинарная кавычка, или апостроф (’) в Windows-1252. Это недопустимый символ в ISO 8859 и в UTF-8, поскольку диапазон 0x80-0x9F зарезервирован для управления C1 символы.

Не уверен, что я нарушаю авторские права. Если это так, пожалуйста, удалите цитату.

1 голос
/ 14 июня 2013

добавьте эти строки поверх вашего кода

#! /usr/bin/env python
# -*- coding: utf-8 -*-
1 голос
/ 31 мая 2011

Объявление кодировки указывает, что вы думаете, что файл в кодировке latin-1, но интерпретатор python обнаруживает, что символ в строке 2509 или очень близко к ней в GlobalVars.py - это не то, что вы думаете.

Вы должны сначала подтвердить кодировку GlobalVars.py.Это действительно латиница-1?

Далее, вы должны проверить символы рядом со строкой 2509. Они также латино-1, или они были вырезаны и вставлены с веб-страницы или где-то еще (возможно, есть UTF-Там есть 8 символов)?

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

0 голосов
/ 31 мая 2011

Простое обходное решение, если ваш файл действительно находится в латинице-1, - это изменить строку html с ее представлением.

AFAIK:

\x92 => 146 in decimal => Æ => Æ

Если ваш персонаж не Æ, то ваш файл не закодирован в латинице-1 ;-) (и вы можете проверить, работает ли utf-8 / cp1292 лучше как быстрый выигрыш)

EDIT : Конечно, вы хотите проверить свою фактическую кодировку файла перед попыткой. Я могу ошибаться, но не уверен на 100% \ x92 в Æ в Iso8859-1: в соответствии с этой страницей она не определена.

...