richiesta.getParameter() non visualizza correttamente la codifica dei caratteri in java servlet

Ho qualche problema con la codifica UTF-8 nel file java servlet. Quando ricevo il valore del parametro nell’URL, ho qualche problema con la codifica UTF-8 caratteri. Non visualizzare correttamente i Caratteri Giapponesi.

Jsp intestazione ha già

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Ho aggiunto il URIEncoding impostazione del connettore a UTF-8 server.xml.

<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

Ho scritto il codice come il seguente in jsp.

<s:textfield key="txt_name" name="txt_name" id="txt_name"
maxlength="64"></s:textfield>

<a href="javascript:showModalWindow('PopUpFile!init.action?<%=Common.PASSWORD%>=<%=Common.encript(ID, Code)%>','',940,650);">
<s:property value="PopUp Link" />
</a>

<script>
    function showModalWindow(x_URL, x_ARG, x_WIDTH, x_HEIGHT) {
        var x_OPT = "dialogHeight: " + x_HEIGHT + "px; " + "dialogWidth: "
                + x_WIDTH + "px; "
                + "edge: Raised; center: Yes; resizable: Yes; status: Yes;";
        x_URL += "&name="+document.getElementById("txt_name").value;
        var retValue = window.showModalDialog(x_URL, x_ARG, x_OPT);
        if (retValue != null) {
            document.forms.frm.action = "ParentFile!getUser.action";
            document.forms.frm.submit();
        }
    }
</script>

E poi, ho scritto il codice come il seguente in java servlet.

if(g_request.getParameter("name") != null){
    g_session.setAttribute(NAME, g_request.getParameter("name"));
}

Ho testato anche con request.setCharacterEncoding() metodo in java servlet, ma non funziona.
Anche se ho provato in molti modi dalle risposte di altri problemi relativi alla codifica dei caratteri in servlet in stackoverflow, non riesco a risolvere il mio problema fino a quando.

Cosa posso fare per visualizzare correttamente la codifica dei caratteri? Grazie in anticipo.

 

4 Replies
  1. 12

    La maggior parte dei server, tra cui Apache Tomcat server sono configurati i parametri di codifica con ISO-8859-1 per impostazione predefinita. Penso che non cambierà questo a meno che non si dispone di un private server dedicato istanza. Così, il programmatore di tecnica è quello di codificare/decodificare i parametri manualmente. Perché si sta utilizzando javascript, c’è encodeURI() o encodeURIComponent() funzione built-in. Vedere Come codificare un URL in JavaScript. Il codice dovrebbe cambiare

    x_URL += "&name="+encodeURI(document.getElementById("txt_name").value);

    in Java di utilizzare il URLDecoder per decodificare parametro indietro.

    java.net.URLDecoder.decode(((String[])request.getParameterMap().get("name"))[0], "UTF-8"));

    Nota, se si utilizza Struts2 dispatcher tipo di risultato, quindi non hai bisogno di parametri di decodifica della stringa di query. Tali parametri vengono analizzati tramite UrlHelper.

    Tuttavia, non mi ricordo quando ho decodificare tali parametri vengono automaticamente decodificato in Struts2.

    Come regola si dovrebbe sapere che se si passano i parametri nell’URL che deve essere codificato in URL. Se si invia il modulo non c’è bisogno di farlo, perché la forma è x-www-form-urlencoded, vedere 17.13.4 tipi di contenuto del Form.

    • Grazie @Romano C, hai salvato la mia vita di nuovo ! 🙂 Io sono solo un principiante in struts 2 e anche in javascript. È sempre spiegare a me durante la risposta al mio problema. Così, ho avuto molte esperienze da voi. Grazie mille !!!
  2. 8

    Stai testando l’output utilizzando System.out.println? Se è così, potrebbe essere che non è configurato per la codifica UTF-8.

    Vedere questo: Non è possibile inviare i caratteri speciali (UTF-8) JSP Servlet: punti di domanda visualizzato

    Inoltre, assicurarsi che si esegue request.setCharacterEncoding("UTF-8") PRIMA di leggere i parametri.

    • È già configurato per l’UTF-8, ora ho provato con SOP, viene visualizzato come “���j�b�gC1”. E anche provato con request.setCharacterEncoding("UTF-8") ma non ha fortuna fino. 🙁
    • richiesta.setCharacterEncoding(“UTF-8”) risolvere il mio problema, grazie.
  3. 3

    Ho simile errore e risolverlo uso di Servlet filter se si utilizza la Primavera, basta aggiungere questa definizione web.xml

    <!-- CharacterEncodingFilter / UTF-8 -->
        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
                <init-param>
                    <param-name>encoding</param-name>
                    <param-value>UTF-8</param-value>
                </init-param>
                <init-param>
                    <param-name>forceEncoding</param-name>
                    <param-value>true</param-value>
                </init-param>
            </filter>
    
            <filter-mapping>
                <filter-name>encodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
            </filter-mapping>

    se non si utilizza la Primavera scrivere una servlet filter come :

    protected void doFilterInternal(HttpServletRequest request,
                HttpServletResponse response, FilterChain filterChain)
                throws ServletException, IOException {
            //Set character encoding as UTF-8
            request.setCharacterEncoding("UTF-8");
            filterChain.doFilter(request, response);
        }
    • Importante: assicurarsi che il filtro è realizzato PRIMA, prima di tutti gli altri, altrimenti non funzionerà
    • Non mi faccia un problema che i test per definire un nuovo filtro prima di encodingFilter, al di sotto si sta lavorando bene, ma web.xml ha un solo filtro ora. github.com/muzir/azorka.web/blob/master/src/main/webapp/WEB-INF/…
    • Beh, in fondo, se i parametri sono accessibili prima dell’CharEncoding è impostato, sei perso. È necessario assicurarsi che nessun codice accede ai parametri di richiesta prima della CharacterEncodingFilter
  4. 0

    Vorrei escale un commento da f.khantsis di una risposta, perché si è rivelato essere importante per il mio caso.

    Importante: assicurarsi che il filtro è realizzato PRIMA, prima di tutti gli altri, altrimenti non funzionerà.

    Abbiamo avuto una codifica corretta impostazione nella nostra servlet filter:

        request.setCharacterEncoding("UTF-8");

    Ma quando ho messo un punto di interruzione in request.getParameter è dimostrato, che ci sono la lettura dei parametri prima di impostare la codifica. Questo succedeva in un altro filtro (csrf). In questo momento la codifica è stato congelato e l’impostazione, è inefficace. Questo può essere dipende dal server, ma nel nostro caso (Websphere) era il caso.

Lascia un commento