2009-05-31 11 views
7

में एन्कोडिंग समस्याएं मेरे पास कई टेक्स्ट फ़ील्ड वाले एचटीएमएल-फॉर्म हैं।जेएसपी

जब मैं अंग्रेजी वर्ण (मेरे मामले में रूसी) सबमिट करने का प्रयास नहीं करता हूं तो सर्वर "अपठनीय" स्ट्रिंग प्राप्त होता है (प्रश्न नहीं - "???" लेकिन कुछ अजीब पात्र)।

मैं इसे यहाँ दिखाने के लिए मेरे कोड को सरल बनाया:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<html> 
    <head><title>Simple jsp page</title></head> 
    <body> 
    <c:out value="${param.rustext}"/> 
    <form action="/test" method="post"> 
     <input type="text" name="rustext" width="30"> 
     <input type="submit" value="Submit"> 
    </form> 
    </body> 
</html> 

मुझे लगता है कि कैसे तय करना चाहिए?

+2

जोड़े अपने पृष्ठ हेडर वास्तव में एन्कोडिंग के रूप में UTF-8 भेज रहे हैं? फिडलर –

+0

जैसे कुछ के साथ जांचें और यदि वे नहीं हैं तो मुझे क्या करना चाहिए? – Roman

उत्तर

8

यूआरएल युक्त पृष्ठ के एन्कोडिंग के बावजूद, टोमकैट यूआरएल पैरामीटर के लिए डिफ़ॉल्ट वर्ण एन्कोडिंग के रूप में आईएसओ -885 9 -1 का उपयोग करता है। इसे "URIEncoding" attribute in its Connector कॉन्फ़िगरेशन के साथ बदला जा सकता है। अन्य एप्लिकेशन सर्वर में समान सेटिंग्स हो सकती हैं।

This article जेएसपी के साथ काम करते समय आमतौर पर कई समस्याओं का सामना करना पड़ता है।

+0

हां, मैं टॉमकैट का उपयोग करता हूं। लिंक के लिए धन्यवाद, मैं वहां कुछ उपयोगी खोजने की कोशिश करूंगा। – Roman

+0

URIEncoding विशेषता के विनिर्देशों के लिए http://tomcat.apache.org/tomcat-5.5-doc/config/http.html देखें। – erickson

+1

यह उत्तर * वास्तव में * गलत है। ओपी पोस्ट का उपयोग कर रहा था, जीईटी नहीं। – BalusC

0

POST का उपयोग करते समय - जो एक ट्यू उपयोग एन्कोडिंग है - फॉर्म को सामग्री-प्रकार "एप्लिकेशन/एक्स-www-form-urlencoded" के रूप में भेजा जाता है। आप अपने एन्कोडिंग को निर्दिष्ट करने के लिए फॉर्म-एट्रिब्यूट स्वीकृति-वर्णसेट = "यूटीएफ -8" निर्दिष्ट कर सकते हैं।

+0

मैंने पहले से ही कोशिश की है और यह – Roman

3

एरिक्सन ने इस पृष्ठ पर यह बहुत अच्छी तरह से समझाया। एक सर्वर-स्वतंत्र समाधान एक वर्ण एन्कोडिंग फ़िल्टर का उपयोग करना है, à la org.springframework.web.filter.CharacterEncodingFilter। उचित वर्गों में फिल्टर घोषणा और फिल्टर यूआरएल मैपिंग जोड़ें

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class EncodingFilter implements Filter { 
    private String encoding = "utf-8"; 
    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain filterChain) throws IOException, ServletException { 
     request.setCharacterEncoding(encoding); 
     filterChain.doFilter(request, response); 
    } 
    public void init(FilterConfig filterConfig) throws ServletException { 
     String encodingParam = filterConfig.getInitParameter("encoding"); 
     if (encodingParam != null) { 
      encoding = encodingParam; 
     } 
    } 
    public void destroy() { 
     // nothing todo 
    } 
} 

web.xml में: नीचे दिए गए उदाहरण देखें

<filter> 
    <filter-name>EncodingFilter</filter-name> 
    <description> 
    <![CDATA[Changes the encoding of the request, in order to help the appserver to correctly interpret request params]]> 
    </description> 
    <filter-class>com.mypackage.EncodingFilter</filter-class> 
<init-param> 
    <param-name>encoding</param-name> 
    <param-value>ISO-8859-15</param-value> 
    </init-param> 
</filter> 


    <filter-mapping> 
     <filter-name>EncodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
+0

काम नहीं करता है ध्यान दें कि यह केवल अनुरोध निकाय को शामिल करता है, अनुरोध यूआरएल नहीं। दूसरे शब्दों में: यह जीईटी अनुरोधों के लिए नहीं, POST अनुरोधों के लिए एन्कोडिंग सेट करेगा। GET अनुरोधों के लिए आपको अभी भी एरिक्सन के उत्तर में उल्लिखित servletcontainer की कॉन्फ़िगरेशन के साथ परेशान करने की आवश्यकता है। – BalusC

+0

ठीक है, मैंने यूआरएल के बारे में सोचा नहीं है। –

0

यह वही है के रूप में विक्टर लोनेस्कु प्रस्तावित है, लेकिन तुम नहीं अपना खुद का एन्कोडिंग फ़िल्टर लिखने की जरूरत है।

निम्नलिखित फिल्टर web.xml को

<filter> 
    <filter-name>charsetFilter</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> 
</filter> 

<filter-mapping> 
    <filter-name>charsetFilter</filter-name> 
    <url-pattern>*.admin</url-pattern> 
</filter-mapping>