Encoding UTF8 string to ISO-8859-1 String (VB.NET)

后端 未结 5 1826
星月不相逢
星月不相逢 2020-12-11 22:11

I need to convert UTF8 string to ISO-8859-1 string using VB.NET.

Any example?


emphasized textI have tried Latin function and not runs. I recei

相关标签:
5条回答
  • 2020-12-11 22:44

    How about:

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

    That assumes that when you say "UTF8 string" you mean "binary data which is the UTF-8 representation of some text". If you mean something else, please specify :)

    Note that ISO-8859-1 only represents a tiny proportion of full Unicode. IIRC, you'll end up with "?" for any character from the source data which isn't available in ISO-8859-1.

    0 讨论(0)
  • 2020-12-11 22:46

    Dont know if this should be posted here but i made a small function in C# to check if a string support the target encoding type.

    Hope it can be of any help...

    /// <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 
    }
    
    0 讨论(0)
  • 2020-12-11 22:48

    http://msdn.microsoft.com/en-us/library/system.text.encoding.convert.aspx

    Try this with the variable "input" as the UTF-8 String;

    VB.NET:

    Dim result As Byte() = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("iso-8859-1"), input);
    

    C#:

    byte[] result = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("iso-8859-1"), input);
    
    0 讨论(0)
  • 2020-12-11 22:54

    Because System.Text.Encoding.GetEncoding("ISO-8859-1") does not support ñ is my guess, in that case you need to use another encoding type for you SMS.

    Please read The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

    0 讨论(0)
  • 2020-12-11 23:02

    The encoding ISO-8859-1 is more commonly called Latin-1. You can get this encoding by doing the following

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

    The full conversion can be done by the following

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

    EDIT

    As Jon pointed out, it may be easier for people to remember the decimal number 28591 rather than the hex number &H6FAF.

    0 讨论(0)
提交回复
热议问题