2010-06-17 19 views
13

मैं अपनी वेबसाइट में एन्कोडिंग के साथ एक बड़ी समस्या में फंस गया हूँ! मैं वसंत 3, टॉमकैट 6, और MySQL डीबी का उपयोग करता हूं। मैं अपनी वेबसाइट में जर्मन और चेक अंग्रेजी के साथ-साथ समर्थन करना चाहते हैं, मैं UTF-8 फ़ाइलों के रूप में सभी JSPs बनाया है, और प्रत्येक jsp में मैं निम्नलिखित शामिल हैं:कैरेक्टर-एन्कोडिंग समस्या वसंत

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

मैं messages.properties बनाया (डिफ़ॉल्ट जो चेक है), message_de.properties, और messages_en.properties। और उन सभी को यूटीएफ -8 फाइलों के रूप में सहेजा जाता है।

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filterclass> 
      org.springframework.web.filter.CharacterEncodingFilter</filterclass> 
    <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> 

<locale-encoding-mapping-list> 
    <locale-encoding-mapping> 
     <locale>en</locale> 
     <encoding>UTF-8</encoding> 
    </locale-encoding-mapping> 
    <locale-encoding-mapping> 
     <locale>cz</locale> 
     <encoding>UTF-8</encoding> 
    </locale-encoding-mapping> 
    <locale-encoding-mapping> 
     <locale>de</locale> 
     <encoding>UTF-8</encoding> 
    </locale-encoding-mapping> 
</locale-encoding-mapping-list> 

<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

और मेरे applicationContext.xml को निम्नलिखित जोड़ें::

<bean id="messageSource"  
    class="org.springframework.context.support.ResourceBundleMessageSource" 
    p:basenames="messages"/> 

<!-- Declare the Interceptor --> 
<mvc:interceptors>  
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" 
      p:paramName="locale" /> 
</mvc:interceptors> 

<!-- Declare the Resolver --> 
<bean id="localeResolver" 
     class="org.springframework.web.servlet.i18n.SessionLocaleResolver" /> 

मैं सेट useBodyEncodingForURI सर्वर का तत्व में सच की विशेषता

मैं web.xml के लिए निम्न गयी। xml के तहत:% CATALINA_HOME%/conf, इसके अलावा एक और बार URIEncoding = "UTF-8" जोड़ने की कोशिश की।

मैं चारसेट [UTF8] और संग्रह के साथ सभी तालिकाओं और खेतों बनाया [utf8_general_ci]

अपने ब्राउज़र में एन्कोडिंग UTF-8 है

(Btw, मैं IE8 और Firefox 3.6.3 है) जब मैं MYSQL क्वेरी ब्राउज़र खोलता हूं और मैन्युअल रूप से चेक या जर्मन डेटा डालता हूं, तो इसे सही ढंग से डाला जा रहा है, और मेरे ऐप में भी सही तरीके से प्रदर्शित किया जा रहा है।

तो, यहां समस्याओं की सूची है मेरे पास है:

  1. डिफ़ॉल्ट रूप से messages.properties (चेक) डिफ़ॉल्ट रूप से लोड करना चाहिए, बजाय messages_en.properties भार।

  2. वेब फॉर्म में, जब मैं चेक डेटा दर्ज करता हूं, तो कंट्रोलर में सबमिट करें पर क्लिक करें, कंसोल में डेटा को डीबी में सहेजने से पहले प्रिंट करें, क्या मुद्रित किया जा रहा है अजीब वर्णों के साथ सही नहीं है, और यह सटीक डेटा है जो डीबी को बचाता है।

मुझे नहीं पता कि गलती कहां है! मैं इसे क्यों काम नहीं कर सकता, हालांकि मैंने लोगों के साथ क्या किया और उनके लिए काम किया! पता नहीं ..

कृपया मेरी मदद करें, मैं दिनों से इस क्रोधित समस्या में फंस गया हूं, और यह मुझे पागल बनाता है!

अग्रिम धन्यवाद।

उत्तर

14

पहला, अगर अपनी परियोजना Maven उपयोग कर रहा है, सुनिश्चित करें कि Maven Resources Plugin has UTF-8 set as its character encoding scheme, अन्यथा संदेश गुण फ़ाइलें एक गलत एन्कोडिंग के साथ अपने लक्ष्य को पत्र लिखा जा सकता है।

दूसरे, आप ResourceBundleMessageSource, जो मानक java.util.ResourceBundle और java.util.Properties है, जो केवल ISO-8859-1 एन्कोडिंग का समर्थन का उपयोग करता है का उपयोग कर रहे हैं।

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="classpath:messages"/> 
     <property name="defaultEncoding" value="UTF-8"/> 
</bean> 

जो मैं this केक समाधान ब्लॉग पोस्ट से पता चला: आप के बजाय ReloadableResourceBundleMessageSource की तरह उपयोग कर सकते हैं।

+0

यह रजत बुलेट था :-) – user256872

+0

मैं इसे स्प्रिंग एप्लिकेशन में कोशिश करता हूं लेकिन सफलता नहीं। –

2

1: डिफ़ॉल्ट रूप से message.properties (चेक) लोड होना चाहिए, बजाय message_en.properties डिफ़ॉल्ट रूप से लोड होते हैं।

मैं वसंत नहीं करता, इसलिए यहां अंधेरे में एक शूट है: शायद क्योंकि अंग्रेजी को पहले आदेश दिया गया है और/या आपका मंच/ब्राउज़र डिफ़ॉल्ट लोकेल के रूप में अंग्रेजी का उपयोग करता है? कॉन्फ़िगरेशन का पुनर्व्यवस्थित करें और एक और दूसरे को बाहर करने के लिए HTTP अनुरोध शीर्षलेख में accept-language देखें।

2: वेब फार्म में, जब मैं चेक डेटा दर्ज और फिर सबमिट करें क्लिक करें, नियंत्रक में मैं कंसोल में डेटा प्रिंट आउट होने से पहले ही db से बचाने के लिए, क्या मुद्रित किया जा रहा है नहीं सही अजीब वर्ण होने है , और यह सटीक डेटा है जो डीबी को बचाता है।

क्या कंसोल डेटा प्रदर्शित करने के लिए यूटीएफ -8 का उपयोग करने के लिए कॉन्फ़िगर किया गया है? यह अन्यथा मंच डिफ़ॉल्ट एन्कोडिंग का उपयोग करेगा। उदाहरण के लिए ग्रहण आप इसे विंडो> प्राथमिकताएं> सामान्य> कार्यक्षेत्र> टेक्स्ट फ़ाइल एन्कोडिंग द्वारा कॉन्फ़िगर कर सकते हैं।

क्या डाटा एक्सेस लेयर यूटीएफ -8 के रूप में डेटा को संभालने के लिए ठीक से कॉन्फ़िगर किया गया है? MySQL जेडीबीसी ड्राइवर इस में थोड़ा गैर-स्मार्ट माना जाता है। यह डीबी-निर्दिष्ट एन्कोडिंग का उपयोग नहीं करेगा, लेकिन क्लाइंट प्लेटफार्म डिफ़ॉल्ट एन्कोडिंग। बिंदु पर, आप जेडीबीसी कनेक्शन स्ट्रिंग में useUnicode=true और characterEncoding=UTF-8 गुणों का उपयोग करना चाहते हैं। जैसे

jdbc:mysql://localhost/some_db?useUnicode=yes&characterEncoding=UTF-8
+0

पहले बिंदुओं के बारे में आपके सुझावों के लिए धन्यवाद, मैंने कोकी लॉकेलरोलॉल्वर फॉर्म वसंत का उपयोग किया जो बाद में समय के लिए उपयोगकर्ता प्राथमिकताओं को बचाएगा। # 2। आप सही थे, कंसोल के साथ समस्या को ग्रह फ़ाइल एन्कोडिंग को ग्रहण के साथ यूआरएफ -8 में सेट करके हल किया गया था, लेकिन फिर भी डेटाबेस में संग्रहीत डेटा दूषित हो गया! # 3 समस्याओं की सूची में समस्या, यह है कि संदेशों_cz.properties से पुनर्प्राप्त डेटा वेब पृष्ठों में सही ढंग से प्रदर्शित नहीं होता है, यह हमेशा दूषित होता है! हालांकि पेज एन्कोडिंग यूटीएफ -8 है! – user256872

3

यह अभी भी काम नहीं करता है और आप बिलाव का उपयोग कर रहे अपने आवेदन सर्वर के रूप में server.xml में हर <Connector> तत्व पर निम्न विकल्प सेट करने का प्रयास: मेरे लिए चाल

<Connector URIEncoding="UTF-8" ...> 
    ... 
</Connector> 

यह किया था। अन्य एप्लिकेशन सर्वर के लिए समान विकल्प हो सकते हैं, इसलिए आप सर्वर दस्तावेज़ों को जांचना चाहेंगे।