Pregunta Diferencia en URL decodificar / codificar UTF-8 entre Java y JS / AS3 (¡error !?)


Tengo un problema con la URL que decodifica una cadena UTF-8 en Java que está codificada con Javascript o Actionscript 3. He configurado un caso de prueba de la siguiente manera:

La cadena en cuestión es Produktgröße

Cuando codifico con JS / AS3 obtengo la siguiente cadena:

escape('Produktgröße')

Produktgr% F6% DFe

Cuando salgo de esto con JS no consigo ningún cambio.

unescape('Produktgr%F6%DFe')

Produktgr% F6% DFe

Entonces, ¿por esto supongo que JS no está codificando correctamente la cadena?

La siguiente JSP produce esta salida

<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URLDecoder"%>
<%=(URLDecoder.decode("Produktgr%F6%DFe","UTF-8"))%><br/>
<%=(URLEncoder.encode("Produktgröße","UTF-8"))%><br/>
<%=(URLEncoder.encode("Produktgröße"))%><br/>
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße")))%><br/>
<%=(URLDecoder.decode(URLEncoder.encode("Produktgröße"),"UTF-8"))%><br/>

Produktgr? E

Produktgr% C3% B6% C3% 9Fe

Produktgr% C3% B6% C3% 9Fe

Produktgröße

Produktgröße

¿Alguna idea de por qué tengo esta disparidad con los idiomas y por qué JS / AS3 no se está comportando como esperaba?

Gracias.


5
2018-05-25 22:02


origen


Respuestas:


escapar es una función obsoleta y no codifica correctamente los caracteres Unicode. Utilizar encodeURI o encodeURIComponent, este último probablemente sea el método más adecuado para sus necesidades.


10
2018-05-25 22:18



Javascript es una URL que codifica su cadena usando Latin-1 juego de caracteres Java es URL que lo codifica usando UTF-8.

La codificación URL realmente está reemplazando los caracteres / bytes que no reconoce. Por ejemplo, incluso si tuviera que atenerse a los caracteres ASCII, ( sería codificado como %28. Tiene el problema adicional de los juegos de caracteres cuando comienza a usar caracteres que no son ASCII (cualquier cosa que tenga más de 7 bits).


1
2018-05-25 22:16



He estado luchando con este problema durante horas y horas ... Mi problema fue una llamada de JQuery Ajax como:

return $.ajax({
        url: '/author!getAuthorContent.action',
        type: 'GET',
        data : {author:name, 'content_type': ct || 'all', 'start': start || 0}
    });

'nombre' es una cadena que contiene caracteres especiales como Jérôme-Serrano

Por algunas razones, la forma en que JS / JQuery codificaba este tipo de caracteres especiales era incompatible y no podía decodificarlo en Java BackEnd ...

La solución fue:

  • Codificar en el lado JS usando var econded = encodeURIComponent(name);
  • Descifralas en el lado de Java usando String decoded = java.net.URLDecoder.decode(econded ,"UTF-8");

algunas refegencias: http://www.programering.com/a/MjN2ADOwATg.html http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery-ajax-call/


1
2017-12-17 23:01