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.