Unterschied in der URL-decode/encode in UTF-8 zwischen Java und JS/AS3 (bug!?)
Ich habe ein Problem URL-Dekodierung von UTF-8-Strings in Java codiert ist, entweder mit Javascript oder Actionscript 3. Ich habe einen test-Fall wie folgt:
Den string in Frage, Produktgröße
Wenn ich encode mit JS/AS3 bekomme ich die folgende Zeichenfolge:
escape('Produktgröße')
Produktgr%F6%DFe
Wenn ich unescape dies mit JS bekomme ich keine änderung
unescape('Produktgr%F6%DFe')
Produktgr%F6%DFe
So, von diesem ich gehe davon aus, dass JS nicht Codierung der string richtig??
Folgende JSP erzeugt dieser Ausgang
<%@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
Jede Idee, warum ich diese Disparität mit den Sprachen und warum JS/AS3 nicht verhält, wie ich es erwarten?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Flucht ist eine als veraltet markierte Funktion und wird nicht korrekt Kodieren von Unicode-Zeichen. Verwenden encodeURI oder alsterrunde, letzteres wahrscheinlich die Methode die meisten geeignet für Ihre Bedürfnisse.
Javascript URL-Codierung der Zeichenfolge mit Latin-1 charset. Java ist eine URL-Kodierung es mit UTF-8.
Die URL-Codierung ist eigentlich nur das ersetzen der Zeichen/bytes, die es nicht erkennen. Zum Beispiel, auch wenn Sie wurden zu halten mit ASCII-Zeichen
(
würde kodiert als%28
. Sie haben das zusätzliche problem der Zeichensätze wenn Sie beginnen mit nicht-ASCII-Zeichen (jedes Ding, das mehr als 7 bits).Ich habe zu kämpfen mit diesem problem, für Stunden lang am Ende...
Mein problem war, ein JQuery-Ajax-Aufruf wie:
'name' ist eine Zeichenkette, die Sonderzeichen enthält wie Jérôme-Serrano
Für einige Gründe, warum der Weg der JS/JQuery-war-Codierung dieser Art von Sonderzeichen nicht vereinbar war und ich konnte nicht entschlüsseln, auf Java-BackEnd...
War die Lösung:
var econded = encodeURIComponent(name);
String decoded = java.net.URLDecoder.decode(econded ,"UTF-8");
einige refetences:
http://www.programering.com/a/MjN2ADOwATg.html
http://www.theerrormessage.com/2013/10/weird-characters-transmitted-to-and-from-server-through-jquery-ajax-call/