2011-11-16 11 views
14

मैं अपने यूआरएल को हिदायत है कि जैसे एक अजाक्स अनुरोध भेजने के लिए:UTF-8 यूआरएल डिकोड/एनकोड

url += '/' + something + '/' + id; 
var response; 
$.ajax({ 
    async : false, 
    type: 'DELETE', 
    url: url, 
... 

मेरे removeId एक चर कि UTF-8 वर्ण शामिल है। मुझे लगता है कि जैसे जावा पक्ष में है कि चर संभाल लेंगे: जावा पक्ष में

@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE) 
    public void myMethod(HttpServletResponse response, @PathVariable String id) { 
    ... 

हालांकि id चर अपने मूल से अलग है क्योंकि UTF-8 विचित्र बातें करने के लिए वर्ण बदल जाता है।

मैं जावास्क्रिप्ट पक्ष से यूटीएफ -8 अक्षरों को कैसे भेज सकता हूं और इसे अपने जावा पक्ष में फिर से बदल सकता हूं (आरईएसटी के साथ वसंत 3, मेरा वेब सर्वर टॉमकैट 7 है)?

पीएस 1: यहां तक ​​कि मैं encodeUriComponent का उपयोग नहीं करता ऐसा लगता है कि मेरा यूआरएल स्वयं एन्कोडिंग कर रहा है?

पी एस 2: प्रश्न और अधिक स्पष्ट करने के लिए:

i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7 

जब मैं देख रहा हूँ आईडी चर कि मूल्य नहीं है:

araç 

के बजाय:

ara%C3%A7 

करता है वसंत (या टोमकैट) स्वचालित रूप से ऐसा करते हैं?

उत्तर

16

आपके द्वारा देखे जाने वाले आईडी मान को utf-8 के बजाय iso-8859-1 charset का उपयोग करके डीकोड किया गया प्रतीत होता है। यूआरएल के पथ भाग का एन्कोडिंग जावा ईई में निर्दिष्ट नहीं है और इसे सेट करने के लिए कोई मानक एपीआई नहीं है।क्वेरी पैरामीटर के लिए आप किसी भी पैरामीटर को सही ढंग से डीकोड करने के लिए request.setCharacterEncoding का उपयोग कर सकते हैं। CharacterEncodingFilter बिल्कुल ऐसा करता है लेकिन पथ पैरामीटर पर कोई प्रभाव नहीं पड़ता है।

यह काम टॉमकैट में करने के लिए आपको URIEncodingConnector तत्व server.xml में "utf-8" में सेट करना होगा।

आप जावा वेबपैप में वर्ण एन्कोडिंग के बारे में जानना चाहते थे, this excellent answer में इसी तरह के प्रश्न में पाया जा सकता है।

+1

आपके उत्तर और मतदान के लिए धन्यवाद। मैं बस यकीन करना चाहता हूँ। मैं वसंत का उपयोग करता हूं और उस कॉन्फ़िगरेशन (टॉमकैट के साथ कुछ भी नहीं किया) और मुझे लगता है कि मैंने अपनी समस्या का समाधान किया है। क्या मुझे कुछ याद आती है (मेरा मतलब है कि मैंने समस्या को ठीक से हल नहीं किया है और कुछ पात्र भी त्रुटि देंगे?) और क्या request.setCharacterEncoding का उपयोग करने के लिए कोई उदाहरण है? – kamaci

+0

@kamaci: मुझे एहसास नहीं हुआ कि आपका जवाब था और जब मैंने अपना जवाब पोस्ट किया तो यह आपकी समस्या का समाधान कर चुका था। 'SetCharacterEncoding' को कॉल करना ओरेकल के ओसी 4 जे कंटेनर के साथ पथ पैरामीटर के लिए काम नहीं करता है, शायद यह टोमकैट के साथ करता है। यद्यपि यह http://stackoverflow.com/questions/8079152/charset-filter-causing-issue-in-parsing-utf-8-characters/8079547#8079547 या http://stackoverflow.com जैसे समान प्रश्नों के कुछ उत्तरों के विपरीत है/प्रश्न/2630748/कैसे-से-सक्षम-पढ़ने-गैर-ascii-characters-in-servlets/2630977 # 2630977 –

+0

आपके विस्तृत उत्तर के लिए धन्यवाद। – kamaci

1

आप पर पेज एन्कोडिंग स्थापित करने की कोशिश की है: वहाँ यह डीकोड करने के लिए किसी भी तरह से स्वचालित रूप से जब यह एक पथ चर (

URLDecoder.decode(id,"UTF-8"); 

यह स्वचालित रूप से परिवर्तित हो जाएगा मैं की तरह के रूप में कुछ भी लिखे बिना मतलब) के रूप में नियंत्रक करने के लिए आता है वह पृष्ठ जहां आप जावास्क्रिप्ट एम्बेड कर रहे हैं?

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

यकीन पेज एन्कोडिंग शुरू करने <head> टैग नीचे यह सही जोड़कर UTF-8 पर सेट है:

<meta charset="utf-8"> 

यह भी सुनिश्चित करें JavaScript फ़ाइल UTF-8 एन्कोडिंग के साथ सहेजी गई है। अपनी टेक्स्ट एडिटर सेटिंग्स की जांच करें।

+0

मैं अपने एचटीएमएल में है कि रेखा है और मेरे संपादक UTF-8 के रूप में मेरे पेज को बचाता है। मुझे लगता है कि यह URL पर यूटीएफ -8 चर भेजने के बारे में एक मुद्दा है? – kamaci

+0

@kamaci 'console.log (url) क्या करता है; 'कहें? –

+0

मेरा आईडी वैरिएबल 'araç' है और यूआरएल है: http: // localhost: 8080/sdfasf/ara% c3% ए 7 – kamaci

0

जावास्क्रिप्ट में उपयोग करें: एन्कोडिंग डेटा के लिए

data=encodeURIComponent(data); 

, और जावा में आप कर सकते हैं:

data=java.net.URLDecoder.decode(data); 
+0

प्रश्न में आईडी अनुरोध पथ का हिस्सा है, इसलिए यह पहले से ही सर्वलेट कंटेनर द्वारा डीकोड किया जाता है। साथ ही, उपयोग करने के लिए वर्णमाला निर्दिष्ट करने वाले दूसरे पैरामीटर के साथ 'डीकोड' विधि को कॉल किया जाना चाहिए। –

3

मैं इस सवाल का जवाब मिला: http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request

मैं कम से कि विन्यास किया था मेरी वसंत पक्ष:

<filter> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF8</param-value> 
    </init-param> 
    <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>SetCharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

और यह यूटीएफ -8 के लिए ठीक काम करता है।

-1

जावास्क्रिप्ट पक्ष पर स्ट्रिंग को एन्कोड करने की आवश्यकता नहीं है। जावा यूनिकोड का समर्थन नहीं करता तो डिकोडिंग के रूप में वहाँ से किया जाना चाहिए:

output = new String(input.getBytes("ISO-8859-1"), "UTF-8");

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