2009-04-02 42 views
46

के वर्ण एन्कोडिंग का पता लगाना मैं एक वेब सेवा बना रहा हूं और एक नोड है जो एक नया संसाधन बनाने के लिए पोस्ट स्वीकार करता है। संसाधन दो सामग्री-प्रकारों में से एक की अपेक्षा करता है - एक एक्सएमएल प्रारूप जिसे मैं परिभाषित कर दूंगा, या फॉर्म-एन्कोडेड चर।HTTP POST अनुरोध

विचार यह है कि उपभोग करने वाले अनुप्रयोग सीधे एक्सएमएल पोस्ट कर सकते हैं और बेहतर सत्यापन आदि से लाभ प्राप्त कर सकते हैं, लेकिन एक HTML इंटरफ़ेस भी है जो फॉर्म-एन्कोडेड सामग्री पोस्ट करेगा। स्पष्ट रूप से एक्सएमएल प्रारूप में एक वर्णमाला घोषणा है, लेकिन मैं नहीं देख सकता कि मैं पोस्ट को देखने से फ़ॉर्म के अक्षरसेट का पता कैसे लगाता हूं।

फ़ायरफ़ॉक्स से फार्म के लिए एक विशिष्ट पद इस तरह दिखता है:

POST /path HTTP/1.1 
Host: www.myhostname.com 
User-Agent: Mozilla/5.0 [...etc...] 
Accept: text/html,application/xhtml+xml, [...etc...] 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 41 

field1=value1&field2=value2&field3=value3 

कौन सा वर्ण सेट के किसी भी उपयोगी संकेत को रोकने के लिए प्रतीत नहीं होता।

जो मैं देख सकता हूं, एप्लिकेशन/एक्स-www-form-urlencoded प्रकार पूरी तरह से HTML में परिभाषित किया गया है, जो केवल% -encoding नियम बताता है, लेकिन डेटासेट के डेटासेट के बारे में कुछ भी नहीं कहता में

असल में, क्या चरित्र सेट को बताने का कोई तरीका है यदि मुझे मूल रूप से प्रस्तुत किए गए HTML सेट वाले चरित्र को नहीं पता है? अन्यथा मुझे वर्ण सेट के आधार पर चरित्र सेट को आजमाने और अनुमान लगाने की आवश्यकता होगी, और जो कुछ मैं बता सकता हूं उससे हमेशा थोड़ा सा है।

+1

यहाँ कई बारीकियों और व्यवहार ब्राउज़र और ऑपरेटिंग द्वारा अलग अलग होंगे रहे हैं प्रणाली। आईई द्वारा उपयोग किया जाने वाला एक सम्मेलन यह है कि यदि आपके पास '_charset_' नाम से छुपा हुआ इनपुट है, तो IE उस फ़ील्ड को उस अक्षर सेट के साथ भर देगा जो फ़ॉर्म सबमिट करते समय उपयोग किया जाता है। यह भी संबंधित प्रश्न देखें http://stackoverflow.com/questions/12830546/accept-charset-utf-8-parameter-doesnt-do-anything-when-used-in-form – EricLaw

उत्तर

57

HTTP पोस्ट का डिफ़ॉल्ट एन्कोडिंग आईएसओ -885 9 -1 है।

बाकी

आप Content-Type हैडर को देखने के लिए है तो लगेगा जैसे

Content-Type: application/x-www-form-urlencoded ; charset=UTF-8 

आप शायद

<form enctype="application/x-www-form-urlencoded;charset=UTF-8"> 

या

<form accept-charset="UTF-8"> 
को

के साथ अपने प्रपत्र घोषणा कर सकते हैं एन्कोडिंग को मजबूर करें।

कुछ संदर्भों:

http://www.htmlhelp.com/reference/html40/forms/form.html

http://www.w3schools.com/tags/tag_form.asp

+1

में फॉर्म सबमिट किया है क्या यह आम ब्राउज़र के साथ काम करता है? –

+0

अच्छी तरह से मुझे नहीं पता, मैं एक वेब डेवलपर नहीं हूं, मैंने लिंक जोड़े हैं जहां आप कुछ संदर्भ पा सकते हैं। – chburd

+0

मैंने कुछ साल पहले सफारी और फ़ायरफ़ॉक्स पर डिफ़ॉल्ट फॉर्म एन्कोडिंग का परीक्षण किया था, और पाया कि वे हमेशा यूटीएफ -8 लौट आए। आईई पर परीक्षण नहीं किया था। मुझे यह जोड़ना चाहिए कि फॉर्म वाला पेज यूटीएफ -8 में था। –

11

POST में उपयोग किया गया वर्णसेट HTML होस्ट में निर्दिष्ट वर्णसेट से मेल खाता है। इसलिए यदि आपका फॉर्म यूटीएफ -8 एन्कोडिंग का उपयोग करके भेजा जाता है जो पोस्ट की गई सामग्री के लिए उपयोग किया जाने वाला एन्कोडिंग होता है। मान एन्कोडिंग के लिए ऑक्टेक्ट्स के सेट में मानों को परिवर्तित करने के बाद URL एन्कोडिंग लागू होती है।

+1

मैं और सोच रहा था कि कोई स्टेटलेस तरीका था या नहीं फॉर्म के चरित्र सेट के ज्ञान के बिना, इसे पास करने के लिए। –

+0

नहीं। क्लाइंट को काम करने के लिए HTTP हेडर में वर्णमाला को स्पष्ट रूप से घोषित करना होगा। –

+2

@CiaranMcNulty जो वास्तव में सच नहीं है, कुछ ब्राउज़र ऐसा नहीं करते हैं। मैंने एफएफ पर यह कोशिश की, पेज क्रिससेट को आईएसओ -885 9 -1 पर मजबूर कर दिया, और यह अभी भी यूटीएफ -8 –

1

अपने सामग्री प्रकार पर चारसेट सेट करके देखें:

httpCon.setRequestProperty("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary); 
+0

सीमा क्या है? –

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