2011-08-21 23 views
71

निम्नलिखित कोड: एक चर text कि, शामिल कई अन्य बातों के अलावा मेंWebClient.DownloadString परिणाम है, लेकिन ब्राउज़र ठीक है

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

परिणाम, स्ट्रिंग

"$ κ $ -Minkowski अंतरिक्ष, अदिश क्षेत्र, और Lorentz निश्चरता के मुद्दे"

हालांकि, जब मैं Firef में है कि यूआरएल पर जाएँ बैल, मैं

$ κ मिल $ -Minkowski अंतरिक्ष, अदिश क्षेत्र, और Lorentz निश्चरता

जो वास्तव में सही है के मुद्दे। मैंने

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); 

पर भी कोशिश की लेकिन यह वही समस्या दी।

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

+5

'UTF8Encoding.Default' वास्तव में 'एन्कोडिंग। डीफॉल्ट' है, जो ओएस भाषा सेटिंग्स के आधार पर एएनएसआई एन्कोडिंग है। – svick

उत्तर

156

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

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() 
+7

बढ़िया, धन्यवाद! अजीब बात यह है कि 'वेब क्लाइंट' इसका पता लगाने के लिए हेडर का उपयोग नहीं करता है, लेकिन यह पूरी तरह से काम करता है, और आपके और @ एसविक के बीच, मैं समझता हूं कि मैंने जो दूसरी चीज की कोशिश की वह भी बुरी तरह विफल रही। – Domenic

+0

'अपलोडस्ट्रिंग' के लिए भी काम करता है – lostmylogin

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