Как показать символы не ascii в Python? - PullRequest
0 голосов
/ 26 мая 2009

Я использую Python Shell следующим образом:

>>> s = 'Ã'
>>> s
'\xc3'

Как я могу напечатать переменную s, чтобы показать символ Ã ??? Это первый и самый простой вопрос. На самом деле, я получаю контент с веб-страницы, которая содержит символы, отличные от ascii, такие как предыдущий, и другие с тильдой, такой как á, é, í, ñ и т. Д. Кроме того, я пытаюсь выполнить регулярное выражение с этими символами в выражение шаблона по отношению к содержимому веб-страницы.

Как можно решить эту проблему ??

Это пример одного регулярного выражения:

u'<td[^>]*>\s*Definición\s*</td><td class="value"[^>]*>\s*(?P<data>[\w ,-:\.\(\)]+)\s*</td>'

Если я использую Expresson, приложение работает нормально.

РЕДАКТИРОВАТЬ [26.05.2009 16:38]: Извините, по поводу моего объяснения. Я постараюсь объяснить лучше.

Мне нужно получить текст со страницы. У меня есть URL этой страницы, и у меня есть регулярное выражение для получения этого текста. Первое, что я подумал, было регулярное выражение не так. Я проверил это с Expresso и работает нормально, я получил текст, который хотел. Итак, во-вторых, я подумал о том, чтобы напечатать содержимое страницы, и тогда я увидел, что это не то, что я вижу в исходном коде веб-страницы. Различия заключаются в не ascii-символах, таких как á, é, í и т. Д. Теперь я не знаю, что мне нужно делать, и если проблема в кодировке содержимого страницы или в тексте шаблона регулярного выражения. Одним из определенных мной регулярных выражений является предыдущий.

Вопрос будет в следующем: есть ли проблема с использованием регулярного выражения, текст шаблона которого не содержит символов ascii ???

Ответы [ 3 ]

2 голосов
/ 26 мая 2009

Предположим, вы хотите распечатать его как utf-8. До Python 3 лучше всего специально его кодировать

print u'Ã'.encode('utf-8')

если вы получаете текст извне, вам нужно специально декодировать ('utf-8), например,

f = open(my_file)
a = f.next().decode('utf-8') # you have a unicode line in a
print a.encode('utf-8') 
2 голосов
/ 26 мая 2009

Как можно распечатать переменную s, чтобы показать символ Ã ???
используйте print:

>>> s = 'Ã'
>>> s
'\xc3'
>>> print s
Ã
1 голос
/ 26 мая 2009

Я бы использовал ord(), чтобы узнать, является ли символ ASCII / специальным:

if ord(c) > 127:
    # special character

Это, вероятно, не будет работать с многобайтовыми кодировками, такими как UTF-8. В этом случае я бы конвертировал в Unicode перед тестированием.

Если вы получаете специальные символы с веб-страницы, вы должны знать кодировку. Затем расшифруйте его, см. Юникод HOWTO .

Редактировать: Я определенно не уверен, о чем этот вопрос ... Это может быть хорошая идея, чтобы уточнить его.

...