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?

Author: jfs, 2009-07-30

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'
 510
Author: Sorantis,
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???????'
>>>
 278
Author: Ferran,
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.

 106
Author: igco,
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.

 105
Author: Brian,
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'
 51
Author: Bastien Léonard,
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.)

 3
Author: JAB,
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')
 2
Author: Gihan Chathuranga,
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
 -1
Author: Arvind Pal,
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