WebClient.DownloadString में एन्कोडिंग मुद्दों के कारण आम अक्षरों में परिणाम होता है, लेकिन ब्राउज़र ठीक है


85

निम्नलिखित कोड:

var text = (new WebClient()).DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20"));

एक चर में परिणाम textहोता है, जिसमें कई अन्य चीजें शामिल हैं, स्ट्रिंग

"$ Ar $ -Minkowski अंतरिक्ष, अदिश क्षेत्र, और लोरेंत्ज़ इंविरियन का मुद्दा"

हालाँकि, जब मैं फ़ायरफ़ॉक्स में उस URL पर जाता हूं, तो मुझे मिलता है

$ ar $ -Minkowski अंतरिक्ष, अदिश क्षेत्र, और लोरेंत्ज़ इंविरियन का मुद्दा

जो वास्तव में सही है। मैंने भी कोशिश की

var data = (new WebClient()).DownloadData("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
var text = System.Text.UTF8Encoding.Default.GetString(data);

लेकिन इसने वही समस्या दी।

मुझे यकीन नहीं है कि गलती कहाँ है। क्या फ़ीड UTF8-एनकोडेड होने के बारे में झूठ बोल रहा है, और ब्राउज़र स्मार्ट है जो यह पता लगाने के लिए पर्याप्त है, लेकिन नहीं WebClient? क्या फ़ीड ठीक से UTF8-एन्कोडेड है, लेकिन WebClientकिसी अन्य तरीके से विफल हो रहा है? इसे कम करने के लिए मैं क्या कर सकता हूं?


6
UTF8Encoding.Defaultवास्तव में है Encoding.Default, जो OS भाषा सेटिंग्स के आधार पर ANSI एन्कोडिंग है।
— svick

जवाबों:


201

यह झूठ नहीं है। आपको डाउनलोडस्ट्रीमिंग को कॉल करने से पहले पहले वेबक्लाइंट के एन्कोडिंग को सेट करना चाहिए।

using(WebClient webClient = new WebClient())
{
webClient.Encoding = Encoding.UTF8;
string s = webClient.DownloadString("http://export.arxiv.org/api/query?search_query=au:Freidel_L*&start=0&max_results=20");
}

जैसे कि आपका विकल्प क्यों काम नहीं कर रहा है, यह इसलिए है क्योंकि उपयोग गलत है। इसका होना चाहिए:

System.Text.Encoding.UTF8.GetString()

9
बहुत बड़िया धन्यवाद! अजीब बात यह है कि WebClientयह पता लगाने के लिए हेडर का उपयोग नहीं करता है, लेकिन यह पूरी तरह से काम करता है, और आपके और @ के बीच, मुझे समझ में आता है कि मैंने जो दूसरी चीज़ की कोशिश की थी वह बुरी तरह से विफल हो रही थी।
— डोमिनिक

1
के UploadStringरूप में अच्छी तरह से
— irfandar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.