Como mostrar caracteres não ascii em python?
Pergunta
Eu estou usando o Shell Python da seguinte maneira:
>>> s = 'Ã'
>>> s
'\xc3'
Como posso imprimir s variável para mostrar a um personagem ??? Este é o primeiro e mais fácil pergunta. Realmente, eu estou recebendo o conteúdo de uma página web que tem caracteres não ASCII, como o anterior e outros com til como A, E, I, n, etc. Além disso, eu estou tentando executar um regex com esses caracteres no expressão padrão contra o conteúdo da página web.
Como pode resolver este problema ??
Este é um exemplo de uma regex:
u'<td[^>]*>\s*Definición\s*</td><td class="value"[^>]*>\s*(?P<data>[\w ,-:\.\(\)]+)\s*</td>'
Se eu usar expresson aplicativo funciona bem.
EDIT [2009/05/26 16:38]: Desculpe, sobre a minha explicação. Vou tentar explicar melhor.
Eu tenho que pegar algum texto de uma página. Tenho a url da página e eu tenho a regex para obter esse texto. A primeira coisa que pensei foi o regex estava errado. Eu verifiquei com o Expresso e funciona bem, eu tenho o texto que eu queria. Assim, a segunda coisa que pensei foi para imprimir o conteúdo da página e foi quando eu vi que o conteúdo não era o que eu vejo no código fonte da página web. As diferenças são os caracteres não ascii como A, E, I, etc. Agora, eu não sei o que tenho que fazer e se o problema é na codificação do conteúdo da página ou no texto padrão da regex. Um dos regex Eu tenho definido é o anterior.
A questão wolud ser: não há qualquer problema usando regex qual o texto padrão tem caracteres não ASCII ???
Solução
Suponha que você queira imprimi-lo como utf-8. Antes de python 3, o melhor é codificá-lo especificamente
print u'Ã'.encode('utf-8')
Se você obter o texto externamente então você tem que especificamente decode ( 'utf-8) como
f = open(my_file)
a = f.next().decode('utf-8') # you have a unicode line in a
print a.encode('utf-8')
Outras dicas
Como posso imprimir s variável para mostrar o caráter de um ???
uso print
:
>>> s = 'Ã'
>>> s
'\xc3'
>>> print s
Ã
Gostaria de usar ord()
para descobrir se um caractere é ASCII / especial:
if ord(c) > 127:
# special character
Isso provavelmente não vai funcionar com a codificação multibyte, como UTF-8. Neste caso, gostaria de converter para Unicode antes de testar.
Se você receber caracteres especiais a partir de uma página web, você deve saber a codificação. Então decodificá-lo, consulte Unicode HOWTO .
Edit: Eu definitivamente não sou certo o que esta pergunta é sobre ... Pode ser uma boa idéia para esclarecê-lo
.