Convertir una cadena Unicode a una cadena en Python (que contiene símbolos adicionales)
Cómo convertir una cadena Unicode (que contiene caracteres adicionales como££, etc.) en una cadena de Python?
8 answers
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'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-30 15:44:32
Puede usar encode to ASCII si no necesita traducir los caracteres no ASCII:
>>> a=u"aaaàçççñññ"
>>> type(a)
<type 'unicode'>
>>> a.encode('ascii','ignore')
'aaa'
>>> a.encode('ascii','replace')
'aaa???????'
>>>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 04:19:09
>>> text=u'abcd'
>>> str(text)
'abcd'
Si la cadena solo contiene caracteres ascii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 15:48:56
Si tiene una cadena Unicode y desea escribirla en un archivo u otra forma serializada, primero debe codificarla en una representación particular que pueda almacenarse. Hay varias codificaciones Unicode comunes, como UTF-16 (usa dos bytes para la mayoría de los caracteres Unicode) o UTF-8 (1-4 bytes / punto de código dependiendo del carácter), etc. Para convertir esa cadena en una codificación particular, puede usar:
>>> s= u'£10'
>>> s.encode('utf8')
'\xc2\x9c10'
>>> s.encode('utf16')
'\xff\xfe\x9c\x001\x000\x00'
Esta cadena raw de bytes se puede escribir en un archivo. Sin embargo, tenga en cuenta que al volver a leerlo, debe saber en qué codificación está y decodificarlo utilizando esa misma codificación.
Al escribir en archivos, puede deshacerse de este proceso manual de codificación/decodificación utilizando el módulo codecs. Por lo tanto, 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 entender en qué codificación está el archivo si quieren leerlos. Si eres el único que hace la lectura / escritura esto no es un problema, de lo contrario asegúrese de que usted escribe en una forma comprensible por cualquier otra cosa utiliza los archivos.
En Python 3, esta forma de acceso a archivos es la predeterminada, y la función incorporada open
tomará un parámetro de codificación y siempre traducirá a/desde cadenas Unicode (el objeto de cadena predeterminado en Python 3) para archivos abiertos en modo texto.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 04:15:17
Aquí hay un ejemplo:
>>> u = u'€€€'
>>> s = u.encode('utf8')
>>> s
'\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-30 15:46:26
Bueno, si estás dispuesto/listo para cambiar a Python 3 (lo que puede no ser debido a la incompatibilidad hacia atrás con algún código de Python 2), no tienes 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 sintaxis u'<text>'
. También tiene lo que son, en efecto, cadenas de bytes, que se utilizan para representar datos (que pueden ser codificados cadena).
Http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
(Por supuesto, si actualmente estás usando Python 3, entonces el problema es probablemente algo que tiene que ver con cómo estás intentando guardar el texto en un archivo.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-30 16:14:33
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')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-19 07:59:44
import json, ast
jdata = ast.literal_eval(json.dumps(jdata)) # Removing uni-code chars
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-10 06:27:54