UTF8编码字符串ISO-8859-1字符串(VB.NET)(Encoding UTF8 strin

2019-07-20 06:28发布

我需要UTF8字符串转换为使用VB.NET ISO-8859-1的字符串。

任何例子吗?


强调文本我已尝试拉丁功能,而不是运行。 我得到不正确的字符串。

我的情况是,我需要使用API​​来发送短信。

现在,我有这样的代码:

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

但不运行...我收到不正确的消息。 例如

如果我写:MANANA返回MAA ANA

如果我写艾瓜返回AIGA

Answer 1:

怎么样:

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

这假设当你说“UTF8字符串”你的意思是“二进制数据,是一些文本的UTF8表示”。 如果你的意思是别的东西,请注明:)

需要注意的是ISO-8859-1仅代表完整的Unicode的一小部分。 IIRC,你会落得“?” 用于从不可用在ISO-8859-1所述源数据的任何字符。



Answer 2:

编码ISO-8859-1通常称为Latin-1的。 您可以通过执行以下步骤得到这个编码

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

完整的转换可以通过应做到以下几点

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

编辑

正如乔恩指出的那样,人们记住的十进制数28591,而不是十六进制数和H6FAF可能会更容易。



Answer 3:

因为System.Text.Encoding.GetEncoding("ISO-8859-1")不支持ñ是我的猜想,在这种情况下,你需要使用其他的编码类型为你的短信。

请阅读绝对绝对最低每一个软件开发人员,积极必须知道的关于Unicode和字符集(没有借口!)



Answer 4:

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

用变量“输入”作为UTF-8字符串尝试这;

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


Answer 5:

不知道这是否应该被张贴在这里,但我在C#中做了一个小功能检查,如果字符串支持目标编码类型。

希望可以帮上什么忙?

/// <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 
}


文章来源: Encoding UTF8 string to ISO-8859-1 String (VB.NET)