2009-06-13 37 views

Respuesta

28

Suponiendo Python ve el nombre como una cadena normal, usted primero tendrá que decodificarlo a Unicode:

>>> name 
'Christensen Sk\xf6ld' 
>>> unicode(name, 'latin-1') 
u'Christensen Sk\xf6ld' 

Otra forma de lograr esto:

>>> name.decode('latin-1') 
u'Christensen Sk\xf6ld' 

Observe la "u" en frente de la cadena, indicando que es código. Si imprime esto, la letra acentuada se muestra correctamente:

>>> print name.decode('latin-1') 
Christensen Sköld 

Por cierto: cuando sea necesario, puede utilizar el método de "codificar" para activar el Unicode en, por ejemplo, una cadena UTF-8:

>>> name.decode('latin-1').encode('utf-8') 
'Christensen Sk\xc3\xb6ld' 
+0

muchas gracias amigo. Entonces, si lo necesito para guardarlo en una base de datos, puedo decodificarlo y guardarlo en la base de datos, ¿verdad? – Vicky

+1

NO, lea el ejemplo de Mark nuevamente. Después de decodificar los datos de lo que sea (latin1, cp1252, etc.) en Unicode, necesita codificar su cadena Unicode con una codificación que (1) su base de datos es compatible y (2) conserva todos los caracteres Unicode ... normalmente UTF-8 . –

8

Sospecho que está funcionando correctamente. De forma predeterminada, Python muestra cadenas en codificación ASCII, ya que no todas las terminales son compatibles con Unicode. Si realmente imprimes la cadena, debería funcionar. Véase el siguiente ejemplo:

>>> u'\xcfa' 
u'\xcfa' 
>>> print u'\xcfa' 
Ïa 
+0

Si el problema es con el terminal, ¿se mostrará correctamente si lo guardo en una base de datos (MySQL)? – Vicky

+0

Sí, lo hará, pero debe ocuparse de la codificación de conjunto de caracteres/colación de su base de datos. – securecurve

6

Dada una cadena de bytes con Unicode escapa b"\N{SNOWMAN}", b"\N{SNOWMAN}".decode('unicode-escape) producirá la cadena Unicode espera u'\u2603'.

Cuestiones relacionadas