Unicode en Python

Ahora uso elixir con mi base de datos mysql y la redispy con redis y selecciono UTF-8 en todo el lugar. Quiero escribir algunos datos en chino como {'Info':'8折','Name':'家乐福'} pero lo que obtuve es así:

 {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'} 

y después de que guarde este dictamen para redisparlo y sacarlo de nuevo, se vuelve:

 {"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"} 

Sé que si agrego u' antes del 8\u6298 y lo 8\u6298 , me mostrará "8折" pero ¿existe alguna función u otra solución para este problema?

Este último se parece a json, intenta descodificarlo primero:

 import json resp = '{"Info": "8\u6298", "Name": "\u5bb6\u4e50\u798f"}' print json.loads(resp) ## {u'Info': u'8\u6298', u'Name': u'\u5bb6\u4e50\u798f'} 

Solo estás viendo la cadena repr (representacional). Pero es el mismo Unicode en la cadena interna.

Prueba esto:

 Python2> d = {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'} Python2> d {'Info': u'8\u6298', 'Name': u'\u5bb6\u4e50\u798f'} Python2> print d["Name"]家乐福 

Oh, pero no vas a recuperar eso. Usted tiene la forma no Unicode de nuevo. Un truco rápido es evaluarlo.

 import ast ast.literal_eval(d["Name"]) 

Pero mejor sería averiguar por qué el sistema no está disparando el Unicode.

Agregue u ‘antes de 8 \ u6298, python almacena este valor como una instancia de Unicode, que no tiene formato de encoding.

Antes de poner los datos en redis, debe codificar su instancia de Unicode, hacer que sea una cadena real.

Seleccionas UTF-8 en todo el lugar, así que solo

 >>> x=u'8\u6298' >>> type(x)  >>> y=x.encode('utf8') >>> type(y)  >>> y '8\xe6\x8a\x98' >>> print y 8折 

Almacene y en lugar de x. Al leer de la base de datos, la salida será una cadena '8\xe6\x8a\x98' (8 折), no una instancia de python '8\u6298' más.

Si desea la versión sin codificar de la cadena, eche un vistazo aquí