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.

Der request-Parameter sollte entschlüsselt werden automatisch vom servlet-container. Sie sollten es nicht verwenden URLDecoder selbst.

InformationsquelleAutor Natraj | 2013-05-20

Schreibe einen Kommentar