De codering UTF8-string en ISO-8859-1 String (VB.NET)

Ik moet zetten UTF8-string en ISO-8859-1 string met VB.NET.

Een voorbeeld?


benadrukte tekstik heb geprobeerd latijns-functie en niet wordt uitgevoerd. Ik ontvang onjuiste string.

Mijn geval is dat ik nodig heb om SMS te verzenden met behulp van de API.

Nu heb ik deze code:

        baseurl = "http://www.myweb.com/api/sendsms.php"
        client = New WebClient
        client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
        client.Encoding = System.Text.Encoding.GetEncoding("ISO-8859-1")
        client.QueryString.Add("user", user)
        client.QueryString.Add("password", pass)
        client.QueryString.Add("alias", myAlias)
        client.QueryString.Add("dest",  mobile)
        textoSms = Me.mmTexto.Text
        textoSms = System.Web.HttpUtility.UrlEncode(textoSms)
        client.QueryString.Add("message", textoSms)
        data = client.OpenRead(baseurl)
        reader = New StreamReader(data)
        s = reader.ReadToEnd()
        data.Close()
        reader.Close()

Maar niet loopt…ik incorrecte berichten. Bijvoorbeeld

als ik schrijf: mañana geeft maa ana

Als ik schrijf aigüa geeft aiga

  • geen. Ik heb niet elke oplossing die goed werkte op 100%. als ik niet zou hebben gemarkeerd als opgelost…sorry…
  • Nee, ik vroeg, wat heb je geprobeerd? Deze “vraag” is gewoon vragen om iemand te vertellen wat je moet doen, met geen bewijs van een voorafgaand onderzoek.
  • Ik begrijp niet wat je zei …. alleen ik weet dat die vraag werd geopend 3 jaar geleden!
  • Ik zie niet hoe wat ik zei was ingewikkeld of moeilijk te begrijpen.
  • Zegt u nu dat het antwoord van Jon Skeet in feite niet het antwoord op uw vraag? Want als het niet de vraag heeft geen enkele zin. UTF8 en ISO-8859-1 zijn coderingen van Unicode-tekst. In .NET, een string is altijd in Unicode-indeling in het geheugen, alleen als je wilt om het te converteren naar een byte array (meestal omdat je nodig hebt om het op te slaan in een binair bestand op te sturen of via het netwerk) die u betrekken bij het coderen. Jon skeets om antwoord was, om de wijzen en te corrigeren voor de vraag bij de hand. Zo niet, sluit ik dit als te-gelokaliseerde sinds duidelijk de vraag is verkeerd dan.
  • mijn excuses. OK, Jon ‘ s voorbeeld werkt goed …. mogelijk een probleem met mijn webservice provider. Nu heb ik te beheren en te vervangen door een aantal tekens voordat u ze verzendt en werkt goed.

InformationsquelleAutor aco | 2009-09-30

 

5 Replies
  1. 8

    Hoe over:

    Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _
                                               Encoding.GetEncoding(28591))

    Die er vanuit gaat dat wanneer je zegt “UTF8-string” bedoel je “binaire gegevens die de UTF-8 representatie van een tekst”. Als je bedoelt iets anders, gelieve te specificeren 🙂

    Opmerking dat de ISO-8859-1 slechts een klein deel van de volledige Unicode. IIRC, je zult eindigen met een “?” voor een personage uit de gegevens van de bron die niet beschikbaar is in ISO-8859-1.

    • Bedankt voor het “? ” – verwijzing, het gebeurde gewoon om mij te redden vandaag.
    • Ik neem probleem te zijn met het gebruik van het woord “klein”. Technisch kan je corrigeren, maar het is ook waar dat een groot deel van de Unicode-is niet relevant voor de meeste toepassingen. Er is een lijst van rond de 30 moderne talen met “Volledige Dekking” in ISO–8859-1 op deze pagina. Spoiler: één van hen is in het spaans: en.wikipedia.org/wiki/ISO/IEC_8859-1
    • Tenzij iemand schrijven in het spaans wil ook een emoji, of de naam van iemand die van niet spaans, of een woord uit een andere taal, etc. Ik overweeg een toepassing die is beperkt tot ISO-8859-1 vrij problematisch te zijn in de moderne wereld. Wanneer een ontwikkelaar heeft een keuze, ik zou adviseren het gebruik van UTF-8.
    • Ik ben het met u er voor 100%, maar ik voelde gewoon de terminologie die gebruikt wordt is slechts een smidge misleidend
    • Ik sta door het, echt. Het is maar een heel klein deel van de volledige Unicode-set, en met emoji zo populair (en tal van andere use cases) ik denk dat het zou alleen geschikt zijn voor een zeer klein deel van de toepassingen.
    • U bent wellicht geïnteresseerd in mijn recente vraag… stackoverflow.com/questions/46006463/…

  2. 3

    De codering ISO-8859-1 is vaker genoemd latijns-1. U kunt deze codering door het volgende te doen

    Dim latin1 = Text.Encoding.GetEncoding(&H6FAF)

    De volledige conversie kan worden gedaan door de volgende

    Public Function ConvertUtf8ToLatin1(Dim bytes As Byte()) As Bytes()
      Dim latin1 = Text.Encoding.GetEncoding(&H6FAF)
      Return Encoding.Convert(Encoding.UTF8, latin1, bytes)
    End Function

    BEWERKEN

    Als Jon wees, kan het gemakkelijker zijn voor mensen om te onthouden het decimale getal 28591 plaats van het hexadecimale getal &H6FAF.

    • Waarom gebruik &H6FAF wanneer de decimale letterlijke 28591 is eerder makkelijker te onthouden (als je weet dat je na 8859-1)?
    • want ik gebruikte reflector en het was outputing hex nummers 🙂
  3. 0

    Weet niet of dit mag hier gepost worden, maar ik maakte een kleine functie in C# om te controleren of een string ondersteuning van het target type codering.

    Hoop dat het kan helpen…

    /// <summary>
    /// Function for checking if a string can support the target encoding type
    /// </summary>
    /// <param name="text">The text to check</param>
    /// <param name="targetEncoding">The target encoding</param>
    /// <returns>True if the encoding supports the string and false if it does not</returns>
    public bool SupportsEncoding(string text, Encoding targetEncoding)
    {
        var btext = Encoding.Unicode.GetBytes(text);
        var bencodedtext = Encoding.Convert(Encoding.Unicode, targetEncoding, btext);
    
        var checktext = targetEncoding.GetString(bencodedtext);
        return checktext == text;
    }
    
    //Call the function demo with ISO-8859-1/Latin-1
    if (SupportsEncoding("some text...", Encoding.GetEncoding("ISO-8859-1")))
    {
        //The encoding is supported
    }
    else
    {
        //The encoding is not supported 
    }

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *