URL-parameter-Dekodierung funktioniert nicht
In meinem java-web-Anwendung, die ich habe, einen URL zu erstellen und dann die URL aufrufen. Beim erstellen der URL, ich bin der Kodierung der Parameterwert mit URLEncoder.encode("text","UTF-8")
Aber, wenn wir die parameter auf der Empfängerseite und entschlüsseln - es ist nicht die Dekodierung einwandfrei. Ich habe versucht, den codierten Wert als request-Attribut, dies funktioniert gut. Aber kann es nicht verwenden, wie pro client-Anforderung.
Schrieb folgenden code zum testen URLEncoder & URLDecoder und URLCodec von Apache-commons-codec-Funktionen.
StringBuffer sb = new StringBuffer("TestSpecialChar'` ~6 Æ æ Ç È 123");
//String testCharacters = "TestSpecialChar'` ~6 Æ æ Ç È 123";
String testCharacters = sb.toString();
try {
String encoded = URLEncoder.encode(testCharacters, "UTF-8");
System.out.println("URLEncoder : " + encoded);
System.out.println("URLDecoder : " + URLDecoder.decode(encoded, "UTF-8"));
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
URLCodec urlc = new URLCodec("UTF-8");
try {
String encoded = urlc.encode(testCharacters);
System.out.println("urlc.encode : " + encoded);
System.out.println("urlc.decode : " + urlc.decode(encoded));
} catch (EncoderException ee){
ee.printStackTrace();
} catch (DecoderException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
try {
String encoded = urlc.encode(testCharacters);
System.out.println("urlc.encode : " + encoded);
System.out.println("URLDecoder : " + URLDecoder.decode(encoded, "UTF-8"));
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (EncoderException ee){
ee.printStackTrace();
}
Dieser code funktioniert perfekt. Dann schrieb ich eine einfache web-Anwendung, wo ich zwei JSP-Seite, in der eine ruft den anderen mit einem codierten Wert, der in der URL. Dieses zeigt nicht das richtige decodierte Wert auf der Empfängerseite. Hier ist der code für Ihre Referenz.
sender.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page language="java" import="java.net.URLEncoder"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Sender</title>
<script type="text/javascript">
function send(){
window.location='<%=request.getContextPath()%>/jsp/receiver.jsp?txt=<%=URLEncoder.encode("TestSpecialChar'` ~6 Æ æ Ç È 123","UTF-8")%>';
}
</script>
</head>
<body onload="javascript:send();">
</body>
</html>
Empfänger.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page language="java" import="java.net.URLDecoder"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Receiver</title>
</head>
<body>
<%
if (request.getAttribute("encoded") != null){
URLDecoder.decode(request.getAttribute("encoded").toString(),"UTF-8");
}
if (request.getParameter("txt") != null){
%>
<%=URLDecoder.decode(request.getParameter("txt").toString(),"UTF-8")%>
inside if getparameter
<%
}
%>
</body>
</html>
Bekomme ich folgende Ausgabe im browser
TestSpecialChar" ~6 Æ æ Ç È 123 innerhalb der if getparameter
statt
TestSpecialChar" ~6 Æ æ Ç È 123 innerhalb der if getparameter
Kann jemand bitte lassen Sie mich wissen, was falsch ist in der test-code und was ist der Unterschied zwischen request-Attribut und parameter, aufgrund derer das Attribut ist richtig dekodiert, in der Erwägung, dass der parameter nicht an???
Temp solution:
Gelöst wird es durch die folgenden Dinge:
1) Erstellt eine Klasse, die ersetzen würde einige bestimmte Zeichen mit UTF-8-code.
2) Entfernt die übergabe von Zeichen-Daten als URL-Parameter.
3) sicherstellen, dass der Aufruf der externen URL in UTF-8 kodiert.
4) ein empfangener Wert, der von externer URL oder die in der Anwendung dekodiert wird, bevor mit dem Wert.
Correct solution:
Zu kommen über das problem der Anwendung entworfen und codiert mit i18n im Auge und alle die JSP-Seite mit UTF-8-Codierung.
URLDecoder
selbst.InformationsquelleAutor Natraj | 2013-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie URL-codieren, den text als UTF-8 aber Ihre JSP-Seiten haben diese Erklärungen in Ihnen:
Möglicherweise stören Sie Verschlüsselung, falls der server behandelt die Seite als ISO-8859-1 statt UTF-8. Ändern Sie Ihre
pageEncoding
auf UTF-8 und sehen, ob das behebt das Problem.http://localhost:8081/AskSam/jsp/receiver.jsp?txt=TestSpecialChar%27%60+~6+%EF%BF%BD+%EF%BF%BD++%EF%BF%BD++%EF%BF%BD++123
Und die Ausgabe alsTestSpecialChar'
~6 � � � � 123 innerhalb der if getparameter `InformationsquelleAutor Bogdan