Decodificación URL Unicode
Pregunta
El método habitual de codificación de URL de un carácter Unicode es dividirlo en 2% de códigos HH. ( \ u4161 = > % 41% 61 )
Pero, ¿cómo se distingue Unicode cuando se decodifica? ¿Cómo sabes que % 41% 61 es \ u4161 frente a \ x41 \ x61 (" Aa ")?
¿Son los caracteres de 8 bits que requieren codificación, precedidos por % 00 ?
O, ¿es el punto en el que se supone que los caracteres Unicode se pierden / dividen?
Solución
Según Wikipedia :
Estándar actual
La sintaxis URI genérica ordena que los nuevos esquemas URI que prevén la representación de los datos de caracteres en un URI deben, en efecto, representar personajes de la conjunto sin reserva sin traducción, y deberia convertir todos los demas caracteres a bytes de acuerdo a UTF-8, y luego codificar en porcentaje aquellos valores. Este requisito era introducido en enero de 2005 con la Publicación de RFC 3986. Esquemas URI. introducido antes de esta fecha no son afectados.
No abordado por el actual especificación es qué hacer con Datos de caracteres codificados. Por ejemplo, En computadoras, manifiestos de datos de personajes en forma codificada, en algún nivel, y por lo tanto podría ser tratado como binario datos o como datos de caracteres cuando se está mapeado a caracteres URI. Presumiblemente, es hasta el esquema de URI especificaciones para tener en cuenta esto posibilidad y requiere una o la otro, pero en la práctica, pocos, si acaso, en realidad hacer.
Implementaciones no estándar
Existe una codificación no estándar para caracteres Unicode:% uxxxx, donde xxxx es un valor Unicode representado como Cuatro dígitos hexadecimales. Este comportamiento no está especificado por ningún RFC y tiene Ha sido rechazado por el W3C. El tercero La edición de ECMA-262 todavía incluye una Función de escape (cadena) que utiliza este sintaxis, pero también un encodeURI (uri) Función que convierte a UTF-8 y codifica en porcentaje cada octeto.
Por lo tanto, parece que depende completamente de la persona que escribe el método Unencode ... ¿No son divertidos los estándares?
Otros consejos
Lo que siempre he hecho es primero codificar en UTF-8 una cadena Unicode para convertirla en una serie de caracteres de 8 bits antes de escapar de cualquiera de esos con% HH.
P.S. - Solo puedo esperar que las implementaciones no estándar (% uxxxx) sean pocas y distantes entre sí.
Desde que se introdujeron los URI antes de que existiera Unicode, o por lo menos en un uso amplio, me imagino que esta es una pregunta muy específica de implementación. UTF-8 codifica su texto, y luego se escapa de los sonidos normales como la mejor idea, ya que es completamente compatible con cualquier sistema ASCII / ANSI, aunque puede que tenga uno o dos caracteres extraños.
En el otro extremo, para decodificar, deberías salir del texto y obtener una cadena UTF-8. Si alguien que usa un sistema anterior intenta enviar la suya algunos datos en ASCII / ANSI, no se hace ningún daño, ya está (casi) codificado en UTF-8.