utf8 open escape data bytes python unicode encoding character-encoding special-characters

open - unicode escape python



¿Cómo puedo obtener caracteres Unicode desde un parámetro de URL? (2)

Necesito usar una solicitud GET para enviar JSON a mi servidor a través de un cliente de JavaScript, así que comencé a repetir las respuestas para asegurarme de que no se pierde nada en la traducción. No parece haber un problema con el texto normal, pero tan pronto como incluya un carácter Unicode de cualquier tipo (por ejemplo, "ç") el carácter se codifica de alguna manera (por ejemplo, "/ u00e7") y el valor de retorno es diferente de solicitar valor Mi principal preocupación es que, A) En mi código de Python, guarde lo que el cliente pretendía enviar a la base de datos correctamente, y B) Repito los mismos valores al cliente que se envió (al realizar la prueba).

Quizás esto significa que no puedo usar base64, o tengo que hacer algo diferente en el camino. Estoy bien con eso. Mi implementación es solo un intento de un medio para un fin.

Pasos actuales (cualquier paso puede cambiarse, si es necesario):

Cadena JSON sin procesar que quiero enviar al servidor:

''{"weird-chars": "°ç"}''

La versión codificada en JavaScript Base64 de la cadena pasó al servidor a través de GET param (en una nota al margen, ¿el signo igual al final de la cadena codificada causará algún problema?):

http://www.myserver.com/?json=eyJ3ZWlyZC1jaGFycyI6ICLCsMOnIn0=

Resultado Python str de b64decode of param:

''{"weird-chars": "/xc2/xb0/xc3/xa7"}''

json.loads de Python de json.loads de param decodificado:

{''weird-chars'': u''/xb0/xe7''}

Python str desde json.dumps de ese dict (y posterior salida al navegador):

''{"weird-chars": "/u00b0/u00e7"}''


Su procedimiento está bien, solo necesita 1 paso más; es decir, codificación desde Unicode a utf-8 (o cualquier otra codificación que admita los "caracteres extraños").

Piensa en la decodificación como lo que haces para pasar de una cadena normal a unicode y a una codificación como lo que haces para volver desde Unicode. En otras palabras:

str un str para producir una cadena unicode

y en - codifica una cadena unicode para producir un str .

Asi que:

params = {''weird-chars'': u''/xb0/xe7''} encodedchars = params[''weird-chars''].encode(''utf-8'')

encodedchars contendrá sus caracteres, que se muestran en la codificación seleccionada (en este caso, utf-8 ).


Todo se ve bien para mí.

>>> hex(ord(u''°'')) ''0xb0'' >>> hex(ord(u''ç'')) ''0xe7''

Quizás debas decodificar el JSON antes de intentar usarlo.