Как мне регулярно искать странные не-ASCII символы в Python? - PullRequest
2 голосов
/ 11 января 2010

Я использую следующее регулярное выражение в основном для поиска и удаления этих символов.

invalid_unicode = re.compile(ur'(Û|²|°|±|É|¹|Í)')

Мой исходный код в ASCII закодирован, и всякий раз, когда я пытаюсь запустить скрипт, он выдает:

SyntaxError: Не-ASCII символ '\ xdb' в файле ./release.py в строке 273, но кодировка не объявлена; см http://www.python.org/peps/pep-0263.html для подробностей

Если я следую инструкциям на указанном веб-сайте и добавлю код utf-8 во вторую строку, мой сценарий не запустится. Вместо этого он дает мне эту ошибку:

SyntaxError: (ошибка Unicode) кодеку utf8 не удается декодировать байт 0xdb в позиции 0: неожиданный конец данных

Как мне запустить это одно регулярное выражение в написанном ASCII-скрипте, и это было бы здорово.

Ответы [ 3 ]

3 голосов
/ 11 января 2010

Вам необходимо выяснить, какую кодировку использует ваш редактор, и установить ее в соответствии с PEP263; или сделать вещи более стабильными и переносимыми (хотя, увы, возможно, немного менее читабельными) и использовать escape-последовательности в строковом литерале, т.е. использовать u'(\xdb|\xb2|\xb0|\xb1|\xc9|\xb9|\xcd)' в качестве параметра для вызова re.compile.

1 голос
/ 11 января 2010

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

Какой текстовый редактор вы используете?

0 голосов
/ 11 января 2010
\x{c0de}

В регулярном выражении будет соответствовать символ Unicode в кодовой точке c0de.

Python использует PCRE, верно? (Если это не так, скорее всего, вместо этого \uC0DE)

...