¿Cómo puedo obtener caracteres Unicode de un parámetro de URL?

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 pierda nada en la traducción. No parece haber un problema con el texto normal, pero tan pronto como incluyo 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 guarda lo que el cliente quería enviar correctamente a la base de datos, y B) devuelvo los mismos valores al cliente que se enviaron (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 bash de un medio para un fin.

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

Cadena JSON sin procesar que quiero enviar al servidor:

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

Versión codificada en Base64 de JavaScript de la cadena pasada al servidor a través del parámetro GET (en una nota al margen, ¿los signos de igualdad al final de la cadena codificada causarán algún problema?):

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

Resultado de Python str de b64decode de param:

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

Python dict de json.loads de json.loads param:

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

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

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

Todo me parece bien.

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

Tal vez debería decodificar el JSON antes de intentar usarlo.

Tu procedimiento está bien, solo necesitas un paso más; es decir, encoding de unicode a utf-8 (o cualquier otra encoding que admita los ‘caracteres extraños’).

Piense en la deencoding como lo que hace para pasar de una cadena normal a Unicode y la encoding como lo que hace para regresar de Unicode. En otras palabras:

Usted str una str para producir una cadena unicode

y codifique una cadena unicode para producir una 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 encoding seleccionada (en este caso, utf-8 ).