Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

httpClient Fehler: Für das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden. (Ausnahme von HRESULT: 0x80070459)

08.08.2018 (👁12131)


Problem:

Beim Lesen einer Webseite mit WPF wird beim Öffnen der URL mit einem HttpClient der Fehlercode fĂŒr fehlendes Unicode-Zeichen ausgegeben.

ZunĂ€chst habe ich vermutet, dass es das encodede Zeichen [] %5B%5D  als Ursache hĂ€tte bei einem httpClient.

Die Lösung liegt aber darin, dass der HttpClient keine schwierigen UTF Codes lesen kann. Deshalb habe ich den Code umgeschrieben auf einen WPF Webrequest.

Fehlermeldung:

FĂŒr das Unicode-Zeichen ist kein zugeordnetes Zeichen in der Mehrbytecodepage vorhanden. (Ausnahme von HRESULT: 0x80070459)

URL

https://www.nigelfrank.com/de/search?keywords=&country%5B%5D=3&type=contract&order=posted

Fehlerhafter Download-Code

Windows.Web.Http.HttpClient client = new Windows.Web.Http.HttpClient(filter);

String sHTML = await client.GetStringAsync(new Uri(sURL));

 

 

Lösung: WPF, C# (teilweise UWP, 2018)

Als Webrequest lesen

                //--< download as webrequest >--

                WebRequest objRequest = WebRequest.Create(sURL);

                objRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);

                HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();

                //</ WebRequest and Response >

 

                //< Stream and Reader >

                Stream objDataStream = objResponse.GetResponseStream();

                StreamReader TextReader = new StreamReader(objDataStream);

                sHTML = TextReader.ReadToEnd();

                //</ Stream and Reader >

                //--</ download as webrequest >--

Kompletter Code, C#, WPF

Download als Webreqest und nicht als String

public static async Task<HtmlDocument> Web_Get_HtmlDocument(string sURL)

{

    //------------< Web_Get_HtmlDocument() >------------

    //* get the HTML Document of a website-URL      

    try

    {

        //----< Read HTML from Website >----

 

 

        //< read HTML >

        string sHTML = "";   //Client Request as string

        try

        {

            string sDownloadType = "webrequest";

            if (sDownloadType=="webrequest")

            {

                //--< download as webrequest >--

                WebRequest objRequest = WebRequest.Create(sURL);

                objRequest.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);

                HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();

                //</ WebRequest and Response >

 

                //< Stream and Reader >

                Stream objDataStream = objResponse.GetResponseStream();

                StreamReader TextReader = new StreamReader(objDataStream);

                sHTML = TextReader.ReadToEnd();

                //</ Stream and Reader >

                //--</ download as webrequest >--

            }

            else

            {

                //--< download as string >--

                //-< HttpClient >-

                HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();

                filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.NoCache;

                filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.Default;

                filter.CookieUsageBehavior = HttpCookieUsageBehavior.Default;

 

                Windows.Web.Http.HttpClient client = new Windows.Web.Http.HttpClient(filter);

                

                //-</ HttpClient >-

                sHTML = await client.GetStringAsync(new Uri(sURL));

                //--</ download as string >--

            }

 

        }

        catch (Exception ex)

        {

            //clsSys.show_Message(ex.Message);

            clsSys.fx_Log("Error httpClient: " + ex.Message);

            return null;

        }

        //</ read HTML >

        //----</ Read HTML from Website >----

 

 

        clsSys.fx_Log("read HTML=" + sHTML.Substring(0, 10) + "..");

 

        //< get HTMLdocument >

        //*create and load to local HtmlDocument

        HtmlDocument doc = new HtmlDocument();

        doc.LoadHtml(sHTML);

        //</ get HTMLdocument >

 

        //< output >

        return doc;

        //</ output >

    }

    catch (Exception ex)

    {

        clsSys.fx_Log("ERROR get HtmlDocument URL=" + sURL + "   Msg:" + ex.Message);

        return null;

    }

 

    //------------</ Web_Get_HtmlDocument() >------------

}