Convierta una cadena Unicode en una cadena en Python (que contiene símbolos adicionales)

¿Cómo convertir una cadena Unicode (que contiene caracteres adicionales como $, etc.) en una cadena Python?

 title = u"Klüft skräms inför på fédéral électoral große" import unicodedata unicodedata.normalize('NFKD', title).encode('ascii','ignore') 'Kluft skrams infor pa federal electoral groe' 

Puede usar la encoding a ASCII si no necesita traducir los caracteres que no son ASCII:

 >>> a=u"aaaàçççñññ" >>> type(a)  >>> a.encode('ascii','ignore') 'aaa' >>> a.encode('ascii','replace') 'aaa???????' >>> 
 >>> text=u'abcd' >>> str(text) 'abcd' 

Si la cadena solo contiene caracteres ascii.

Si tiene una cadena Unicode y desea escribir esto en un archivo u otra forma serializada, primero debe codificarla en una representación particular que pueda almacenarse. Existen varias codificaciones comunes de Unicode, como UTF-16 (utiliza dos bytes para la mayoría de los caracteres de Unicode) o UTF-8 (1-4 bytes / punto de código según el carácter), etc. Para convertir esa cadena en una encoding particular, puedo usar:

 >>> s= u'£10' >>> s.encode('utf8') '\xc2\x9c10' >>> s.encode('utf16') '\xff\xfe\x9c\x001\x000\x00' 

Esta cadena cruda de bytes se puede escribir en un archivo. Sin embargo, tenga en cuenta que al leerlo de nuevo, debe saber en qué encoding se encuentra y decodificarlo utilizando esa misma encoding.

Al escribir en archivos, puede deshacerse de este proceso de encoding / deencoding manual utilizando el módulo de codecs . Entonces, para abrir un archivo que codifique todas las cadenas Unicode en UTF-8 , use:

 import codecs f = codecs.open('path/to/file.txt','w','utf8') f.write(my_unicode_string) # Stored on disk as UTF-8 

Tenga en cuenta que cualquier otra cosa que esté utilizando estos archivos debe comprender en qué encoding está el archivo si desean leerlos. Si usted es el único que realiza la lectura / escritura, esto no es un problema, de lo contrario, asegúrese de escribir en una forma comprensible por cualquier otra cosa que utilice los archivos.

En Python 3, esta forma de acceso a archivos es la predeterminada, y la función de open incorporada tomará un parámetro de encoding y siempre se traducirá a / desde cadenas de Unicode (el objeto de cadena predeterminado en Python 3) para archivos abiertos en modo de texto.

Aquí hay un ejemplo:

 >>> u = u'€€€' >>> s = u.encode('utf8') >>> s '\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac' 

Bueno, si está dispuesto / listo para cambiar a Python 3 (lo que puede no deberse a la incompatibilidad hacia atrás con algún código de Python 2), no tiene que hacer ninguna conversión; todo el texto en Python 3 se representa con cadenas Unicode, lo que también significa que no hay más uso de la syntax u'' . También tiene lo que son, en efecto, cadenas de bytes, que se utilizan para representar datos (que pueden ser una cadena codificada).

http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit

(Por supuesto, si actualmente está usando Python 3, entonces el problema probablemente tenga que ver con cómo intenta guardar el texto en un archivo).

Aquí hay un código de ejemplo

 import unicodedata raw_text = u"here $%6757 dfgdfg" convert_text = unicodedata.normalize('NFKD', raw_text).encode('ascii','ignore') 
 import json, ast jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars