Estoy usando Python Shell de esta manera:

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

¿Cómo puedo imprimir la variable s para mostrar el carácter? Esta es la primera y más fácil pregunta. Realmente, obtengo el contenido de una página web que tiene caracteres no ascii como el anterior y otros con tilde como á, é, í, ñ, etc. Además, estoy tratando de ejecutar una expresión regular con estos caracteres en el expresión de patrón contra el contenido de la página web.

¿Cómo puede resolver este problema?

Este es un ejemplo de una expresión regular:

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

Si uso la aplicación Expresson funciona bien.

EDITAR [26/05/2009 16:38]: Lo siento, sobre mi explicación. Trataré de explicar mejor.

Tengo que obtener un texto de una página. Tengo la URL de esa página y tengo la expresión regular para obtener ese texto. Lo primero que pensé fue que la expresión regular estaba mal. Lo comprobé con Expresso y funciona bien, obtuve el texto que quería. Entonces, lo segundo que pensé fue imprimir el contenido de la página y fue cuando vi que el contenido no era lo que veo en el código fuente de la página web. Las diferencias son los caracteres no ascii como á, é, í, etc. Ahora, no sé qué tengo que hacer y si el problema está en la codificación del contenido de la página o en el texto del patrón de la expresión regular. Una de las expresiones regulares que he definido es la anterior.

La pregunta sería: ¿hay algún problema al usar regex que texto de patrón tiene caracteres no ascii?

0
jaloplo 26 may. 2009 a las 17:53

3 respuestas

La mejor respuesta

Suponga que desea imprimirlo como utf-8. Antes de Python 3, lo mejor es codificarlo específicamente

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

Si obtiene el texto externamente, entonces debe decodificar específicamente ('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') 
2
odwl 26 may. 2009 a las 15:41

Usaría ord() para averiguar si un personaje es ASCII / especial:

if ord(c) > 127:
    # special character

Esto probablemente no funcionará con codificaciones multibyte como UTF-8. En este caso, me convertiría a Unicode antes de probar.

Si obtiene caracteres especiales de una página web, debe conocer la codificación. Luego decodifíquelo, consulte Unicode HOWTO.

Editar: definitivamente no estoy seguro de qué se trata esta pregunta ... Puede ser una buena idea aclararla.

1
Bastien Léonard 26 may. 2009 a las 14:07

¿Cómo puedo imprimir la variable s para mostrar el carácter? ???
use print:

>>> s = 'Ã'
>>> s
'\xc3'
>>> print s
Ã
2
Jason Coon 26 may. 2009 a las 14:06