मैं जावा/जेएसपी/टोमकैट/माइस्क्ल का उपयोग करके एक साधारण वेब एप्लिकेशन विकसित कर रहा हूं, और सबसे अधिक समस्या चरित्र एन्कोडिंग पर निहित है क्योंकि मुझे डिफ़ॉल्ट 8851 के बजाय यूटीएफ -8 एन्कोडिंग से निपटने की आवश्यकता हैजावा टॉमकैट यूटीएफ -8 एन्कोडिंग समस्या
सबसे पहले मैं अपनी प्रोग्राम संरचना का वर्णन करना चाहता हूं। मैं सभी अनुरोधों को संभालने के लिए Controller.java नामक एक सर्वलेट का उपयोग कर रहा हूं। तो web.xml में, मेरे पास एक नियंत्रक सर्वलेट है जो * .do से सभी अनुरोध करता है।
फिर यह नियंत्रक अनुरोधित यूआरएल के आधार पर अनुरोध भेज देगा, उदाहरण के लिए, यदि ग्राहक रजिस्टर के लिए पूछता है, तो नियंत्रक Register.java को अनुरोध भेज देगा।
और Register.java में, वहाँ एक तरीका है जिसके पैरामीटर, अर्थात् के रूप में अनुरोध लेता है:
public String perform(HttpServletRequest request) {
do something with the request...
}
तो समस्या यह है कि अगर मैं इस विधि के अंदर UTF-8 में कुछ प्रिंट करना चाहते हैं, यह यादृच्छिक पात्र देंगे। उदाहरण के लिए, मेरे पास एक एनम है जो कई स्थिरांक स्टोर करता है, पारंपरिक चीनी में एनम का नाम है। अगर मैं इसे
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
में प्रिंट करता है तो यह चीनी में सही ढंग से मुद्रित होता है। हालांकि, अगर मैं विधि HttpServletRequest से निपटने के अंदर सटीक कोड डाल:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
वे यादृच्छिक पात्रों के रूप में मुद्रित कर रहे हैं, लेकिन मैं डिबग खिड़की (ग्रहण) है कि चर सही चीनी अक्षरों पकड़े हुए हैं से देख सकते हैं।
तो, वही स्थिति तब होती है जब मैं अनुरोध से मूल्य संग्रह करना चाहता हूं .getParameter()। डीबग विंडो में, मैं देख सकता हूं कि चर सही अक्षर धारण कर रहा है, लेकिन एक मैं इसे प्रिंट करता हूं या इसे डेटाबेस में संग्रहीत करने का प्रयास करता हूं, यह यादृच्छिक वर्ण है।
मुझे नहीं पता कि व्यवहार इस तरह क्यों कार्य करता है, और यह मुझे सबमिट किए गए फॉर्म मान पढ़ने और उन्हें डेटाबेस में संग्रहीत करने से रोक रहा है। क्या कोई इस पर कुछ संकेत दे सकता है?
ग्रेट धन्यवाद।
मैं नहीं समझ सकता है कि क्या आप में सर्वर के कंसोल और लॉग, पर भ्रष्ट आउटपुट * या * भ्रष्ट उत्पादन को लेकर चिंतित हैं ब्राउज़र के परिणामस्वरूप प्रतिक्रिया। क्या आप स्पष्ट कर सकते हो? – erickson
'System.getProperty ("file.encoding") का मान क्या है? – erickson
मुझे इस बारे में चिंता है कि डीबग विंडो में मैं सही एन्कोडिंग देख सकता हूं, लेकिन जब मैं चर को अपने डेटाबेस एक्सेस ऑब्जेक्ट में पास करता हूं और इसे डीबी पर संग्रहीत करता हूं, तो यह यादृच्छिक वर्ण बन जाएगा। तो मैंने पाया कि अनुरोधों से निपटने की विधि में, यहां तक कि बस यूटीएफ -8 एनम मूल्य मुद्रित भी काम नहीं करता है। –