2011-05-31 3 views
8

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

_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 -*- 

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

+0

возможно, вы должны использовать кодировку UTF-(вместо латинского) ...? – phynfo

ответ

0

Удобное решение для решения проблемы, если ваш файл действительно находится в латине-1, заключается в изменении строки html с ее представлением.

AFAIK:

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

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

EDIT: Конечно, вы хотите проверить свою ФАКТИЧЕСКУЮ кодировку файла перед тем, как попробовать. Возможно, я ошибаюсь, а не на 100% уверен, что \ x92 есть Æ в Iso8859-1: в соответствии с этим page он не определен.

3

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

1

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

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

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

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

8

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

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

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

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

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

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

3

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

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

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

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

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

2

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

Code point 0x92 (146 decimal) is the right single quotation mark, or apostrophe (’) in Windows-1252. It's an invalid character in ISO 8859 and in UTF-8, since the 0x80-0x9F range is reserved for C1 control characters.

Не уверен, что если я разоряя авторское право. Если да, удалите блок-образец.

+0

У меня такая же ошибка, когда я скопировал некоторый текст из python.org в качестве комментария в моем коде. В тексте был апостроф (а не версия Windows), который вызывал это. Я удалил апостроф и использовал его версию Windows. Ошибка исчезла. – user3885927

1

добавить эти строки в верхней части кода

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
Смежные вопросы