2011-02-28 9 views
55

मैं web.xmlUTF-8 वसंत MVC में एन्कोडिंग, रूपों

<filter> 
     <filter-name>encoding-filter</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>encoding-filter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

में इस है और file.jsp के शीर्ष पर मैं इस राशि के साथ समस्या: <head> इस में

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 

:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

और विधि POST के साथ FORM से लैटिन -1 सेट के अलावा अन्य वर्ण अभी भी सही नहीं हैं।

+0

आपका अपना जवाब सबसे अच्छा है। कृपया इसे स्वीकार करें –

+0

आप दूसरों की मदद करने के लिए अपना उत्तर क्यों स्वीकार नहीं कर रहे हैं? – sns

+0

वह स्वीकार नहीं कर सकता है। चूंकि स्टैक ओवरफ्लो पर यहां उनके आखिरी बार देखा गया है कि 3 मार्च 1111 को 12:46 @NaeemShah –

उत्तर

76

मैंने इसे हल किया।

वेब.xml में यह फ़िल्टर फ़ाइल में पहला फ़िल्टर होना चाहिए।

+0

दिखाता है, मुझे वसंत और रोमनिना वर्णों का उपयोग करके एक वेब पेज सबमिट करते समय भी यही समस्या थी। मुझे पूरी तरह से याद आया कि यह वसंत रूपों के कारण यूटीएफ -8 के एक अलग एन्कोडिंग का उपयोग करने के कारण आ सकता है। :) आप मुझे बचा लीजिए। धन्यवाद! – Eugene

+3

क्या आप जानते हैं क्यों? –

+1

@Sangdol: समस्या यह है कि जब भी पृष्ठ एन्कोडिंग को यूटीएफ -8 के रूप में निर्दिष्ट किया जाता है, तब भी आधुनिक ब्राउज़र अब POST अनुरोध सबमिट करते समय स्वीकृति-एन्कोडिंग हेडर भेजते हैं (http://bugzilla.mozilla.org/show_bug.cgi देखें? आईडी = 572652, http://code.google.com/p/chromium/issues/detail?id=112804) और सर्वलेट स्पेक डिफ़ॉल्ट रूप से लैटिन -1/आईएसओ -885 9 -1 निर्दिष्ट करता है। कैरेक्टर एन्कोडिंगफिल्टर के लिए जवाडोक भी देखें: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/filter/CharacterEncodingFilter.html – anre

8

ध्यान दें कि यह केवल POST अनुरोधों के लिए काम करता है। आप कोड करने के लिए चाहते हैं, तो भी <Connector> टैग में URIEncoding="UTF-8" useBodyEncodingForURI="true" गुण जोड़कर अनुरोध (<a href=...> साथ अर्थात लिंक), आप, आपके सर्वर के server.xml फ़ाइल को संशोधित करना होगा प्राप्त करें।

देखें: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

+0

इस मुद्दे को गुगलते हुए पूरी सुबह बिताएं। हर कोई URIEncoding प्रॉपर्टी का सुझाव दे रहा था, पहली बार जब मैं उपयोग करता हूं बॉडीएन्कोडिंगफोरूरि और यह मेरे लिए हल हो गया, धन्यवाद! –

12

मैं इसी तरह की समस्या थी। जब मैं एक फॉर्म पोस्ट करता हूं और इसे डीबी में सहेजता हूं, तो इसे ?????? लेकिन अगर मैं मैन्युअल रूप से MySQL वर्कबेंच का उपयोग कर डीबी में डालता हूं तो यह ठीक काम करता है।

मैंने सोचा कि समस्या केवल http अनुरोध एन्कोडिंग में है। इसलिए, मैंने इस मुद्दे के बारे में मुझे मिली सभी सिफारिशें लगभग server.xml पर फ़िल्टर जोड़ने, वेब.xml पर फ़िल्टर जोड़ने और MySQL कॉन्फ़िगरेशन फ़ाइल my.ini में सेटिंग्स बदलना, लेकिन यह मेरी समस्या का समाधान नहीं करता है।

समस्या दो बातें http अनुरोध एन्कोडिंग और JDBC कनेक्शन के कारण था। किसी कारण से MySQL डेटा को आईएसओ -885 9 -1 के रूप में स्वीकार नहीं कर रहा है जो यूटीएफ -8 के रूप में नहीं है।

तो, मैं सभी परिवर्तनों को वापस लाया और मैं दो परिवर्तन नीचे बनाया: के रूप में नीचे बिलाव बदलें server.xml:

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

JDBC बदलें कनेक्शन के रूप में नीचे गुण:

jdbc.driver_class=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8 
jdbc.username=root 
jdbc.password 

यहां समाधान कुंजी उपयोग कर रही है Unicode = yes & characterEncoding = UTF-8

** वेब में @jbb जैसे फ़िल्टर जोड़ें।एक्सएमएल: **

<filter> 
    <filter-name>encoding-filter</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>encoding-filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

तो Thymeleaf प्रयोग किया जाता है, नीचे के रूप में viewResolver और TemplateResolver बदलने के लिए:

viewResolver.setCharacterEncoding("UTF-8"); 
viewResolver.setContentType("text/html; charset=UTF-8"); 

templateResolver.setCharacterEncoding("UTF-8"); 
+0

आपने मेरा दिन बनाया है! 'URIEncoding =" UTF-8 "'मेरे लिए हल किया गया! – shimatai

+0

मैं web.xml में एन्कोडिंग-फ़िल्टर चूक गया, अब यह आकर्षण की तरह काम करता है। –

+0

यह: 'viewResolver.setCharacterEncoding (" UTF-8 "); viewResolver.setContentType ("टेक्स्ट/एचटीएमएल; वर्णसेट = यूटीएफ -8"); टेम्पलेटResolver.setCharacterEncoding ("UTF-8"); ' मेरे लिए काम किया! बहुत बहुत धन्यवाद! – Merphys

संबंधित मुद्दे