2016-08-21 14 views
7

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

जब मैं अपने प्रतिक्रिया deserialize करने की कोशिश, मैं follwing त्रुटि मिलती है:

'UTF8' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. Parameter name: name The character set provided in ContentType is invalid. Cannot read content as string using an invalid character set.

ContentType application/json; charset=UTF8

कोई भी विचार है?

private static HttpClient GetHttpClient() 
{ 
    HttpClientHandler handler = new HttpClientHandler() { 
     AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate 
    }; 
    var httpClient = new HttpClient(handler); 
    httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); 
    return httpClient; 
} 

public async Task<SearchArtistResponse> GetSelfTopAsync(string type, string userName) 
{ 
    var httpClient = GetHttpClient(); 
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", GetAccessToken(userName)); 

    var sb = new StringBuilder(); 
    sb.Append(ApiUrl); 
    sb.Append($"/me/top/{type}"); 
    var query = sb.ToString(); 
    var response = await httpClient.GetAsync(query); 

    var spotifyResponse = JsonConvert.DeserializeObject<SearchArtistResponse>(await response.Content.ReadAsStringAsync()); 
    return spotifyResponse; 
} 
+0

मुझे लगता है कि यह स्पॉटिफा वेब एपीआई में सिर्फ एक बग है, इस एंडपॉइंट के लिए charset = utf-8 के बजाय charset = UTF8 भेज रहा है। यह यहां दायर किया गया है: https://github.com/spotify/web-api/issues/291 – jooon

+0

मैंने प्रॉक्सी निर्दिष्ट करते हुए एक समान समस्या हल की [https://stackoverflow.com/q/16526689/86967)। – nobar

+0

आप इसे पहले से ही पढ़ सकते हैं और फिर इसे deserializer को देने से पहले त्रुटि को ठीक कर सकते हैं ... – Nyerguds

उत्तर

9

आप .net कोर का उपयोग कर रहे:

यहाँ मेरे अनुरोध कोड है?

आप एन्कोडिंग नेट अपने वातावरण में उपलब्ध डेस्कटॉप में उपलब्ध बनाने के लिए निम्न कोड जोड़ने की आवश्यकता होगी:

CodePagesEncodingProvider.Instance पर
System.Text.EncodingProvider provider = System.Text.CodePagesEncodingProvider.Instance; 
Encoding.RegisterProvider(provider); 

अधिक जानकारी here पाया जा सकता है।

+0

नहीं, मैं .NET 4.5 @ सेफ्र – Fredrik

+0

का उपयोग कर रहा हूं तो यह मामला नहीं है ... कोई और नहीं? – Fredrik

4

समस्या प्रतिक्रिया हेडर Content-Type के सत्यापन, पाए जाते हैं कि जब आप ReadAsStringAsync() कहते हैं, अगर आप ReadAsByteArrayAsync() बजाय फोन और स्ट्रिंग

(System.Text.Encoding.UTF8.GetString()) 

कि काम वाला होगा करने के लिए पार्स होना चाहिए !!!

+0

हां, यह वही है जो मेरे लिए काम करता है! –

+0

वास्तव में यूटीएफ -8 होने के लिए _meant_ सुनिश्चित करने के लिए प्राप्त बाइट्स में उस "यूटीएफ 8" स्ट्रिंग की जांच करने के लिए सबसे अच्छा हो सकता है, और अगर आपको इसे ठीक करने की आवश्यकता है तो केवल इसे ठीक करें। – Nyerguds

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