2011-01-28 7 views
5

यह एक शॉट में अंधेरे, और मैं पहले से माफी माँगता हूँ इस सवाल का एक पागल के ramblings की तरह लगता है, तो।सी #, UTF-8 और एन्कोडिंग पात्रों

तृतीय पक्ष के साथ एकीकरण के हिस्से के रूप में, मैं UTF8 एन्कोड करने के लिए कुछ स्ट्रिंग जानकारी सी # का उपयोग कर की जरूरत है तो मैं बहुखण्डीय फ़ॉर्म के माध्यम से लक्ष्य सर्वर पर भेज सकते हैं। समस्या यह है कि वे मेरे कुछ सबमिशन को अस्वीकार कर रहे हैं, शायद इसलिए कि मैं उनकी सामग्री को सही ढंग से एन्कोड नहीं कर रहा हूं।

अभी, मैं यह पता लगाने की कोशिश कर रहा हूं कि कैसे डैश या हाइफ़न - मैं यह नहीं बता सकता कि यह केवल इसे देखकर कौन सा है - लक्ष्य सर्वर द्वारा [email protected]~S के रूप में प्राप्त या व्याख्या की गई है (हाँ, यह है एक 5-वर्ण वाली स्ट्रिंग और आपका ब्राउज़र गड़बड़ नहीं कर रहा है)। और दुर्भाग्य से मुझे Encoding.UTF8.GetBytes() की पर्याप्त समझ नहीं है, यह जानने के लिए कि समस्या कहां झूठ बोल सकती है, बाइट सरणी का उपयोग कैसे करें।

किसी को भी किसी भी सुझाव या सलाह प्रदान कर सकते हैं, मैं बहुत यह जानना चाहेंगे। अब तक मेरा एकमात्र दोस्त एमएसडीएन रहा है, और उसमें से अधिकतर नहीं।

UPDATE 1: - हेक्स-एन्कोड होगा इसे में "% E2% 80% 94" कुछ और चारों ओर से खुदाई करने के बाद, मुझे लगता है कि System.Web.HttpUtility.UrlEncode() का उपयोग कर एक एम डैश चरित्र ("") एन्कोड करने के लिए की खोज की।

मैं वर्तमान में इस जानकारी को HttpWebRequest पोस्ट में भेज रहा हूं, जिसमें "एप्लिकेशन/एक्स-www-form-urlencoded" सामग्री प्रकार है - क्या इससे समस्या हो सकती है? और यदि हां, तो नाम-मूल्य जोड़े की एक श्रृंखला को एन्कोड करने का उचित तरीका क्या है, जिनके मानों में यूनिकोड वर्ण हो सकते हैं, जैसे कि यह एक सर्वर द्वारा यूटीएफ -8 अनुरोध की अपेक्षा की जाएगी?

+0

कि परिणाम मुझे लगता है कि चाहते हैं आप UTF8 em डैश एन्कोडिंग का परिणाम एन्कोडिंग ascii हो सकता है से। – Joshua

+0

गलत एन्कोडिंग के साथ भी, यह बहुत ही असंभव है कि 1-वर्ण डैश का अनुवाद 5-वर्ण अनुक्रम में किया जाना चाहिए। यह शायद न केवल एक एन्कोडिंग समस्या है। –

+0

@ जोशुआ: मुझे लगता है कि आप समस्या के दिल के करीब हैं। मैंने अभी कुछ और जानकारी के साथ अपने मूल पोस्ट में एक अपडेट जोड़ा है। –

उत्तर

3
byte[] test = System.Text.Encoding.UTF8.GetBytes("-"); 

आप

test[0] = 0x2D (45 as integer). 

सत्यापित करें कि आपका लक्ष्य सर्वर से 0x2D भेजने देना चाहिए।

+1

Wireshark सामान – Marlon

+0

इस तरह मैंने पहले Wireshark उपयोग नहीं किया है के लिए उपयोगी है, लेकिन हमारे नेतृत्व डेवलपर फ़िडलर साथ बहुत अनुभवी है। जैसे ही मैं कार्यालय में वापस आऊंगा, मैं इसे एक शॉट दूंगा - टिप के लिए धन्यवाद। –

+0

वायरसहार्क सेटअप करने के लिए बहुत आसान है। यह आपको यह देखने की अनुमति देता है कि आपके सेवर में कौन से पैकेट आ रहे हैं। आप डेटा को कई तरीकों से फ़िल्टर कर सकते हैं ताकि आप डेटा में हार न सकें। – Chauncat

1

आप अपने Content-Type हैडर के लिए एक "charset = utf-8" पैरामीटर जोड़ने पड़ सकते हैं। आप अपने एन्कोडिंग को सेट करने के लिए Content-Encoding शीर्षलेख भी लेना चाहते हैं। हेडर में निम्न शामिल होना चाहिए:

सामग्री-प्रकार: मल्टीपार्ट/फॉर्म-डेटा; charset = utf-8

अन्यथा, वेब सर्वर नहीं जानता कि आपके बाइट्स यूटीएफ -8 बाइट हैं, इसलिए यह उन्हें गलत तरीके से परिभाषित करेगा।

+0

जब आप मल्टीपार्ट फॉर्म भेजते हैं तो मैं वर्तमान में एक सामग्री एन्कोडिंग प्रकार को स्पष्ट रूप से परिभाषित नहीं कर रहा हूं। मैंने अभी तीसरे पक्ष को एक ईमेल भेजा है, यह पूछकर कि क्या उन्हें पता था कि डिफ़ॉल्ट अपेक्षित सामग्री प्रकार क्या था - क्या वह कुछ आसानी से पहचानने में सक्षम होगा? मुझे लगता है कि वे माइक्रोसॉफ्ट सर्वर (आईआईएस) चला रहे हैं। –

+0

'यूटीएफ -8' [वैध 'सामग्री-एन्कोडिंग' मान नहीं है] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11)। उस हेडर का उपयोग यह इंगित करने के लिए किया जाता है कि पेलोड कैसे संपीड़ित होता है। इसका उपयोग वर्णमाला को इंगित करने के लिए नहीं किया जाता है। – dkarp

+0

@dkarp सही है। – Jacob

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