我需要使用VB.NET将UTF8字符串转换为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()
但是没有运行......我收到了错误的消息。例如
如果我写:mañana返回 maa ana
如果我写aigüa返回 aiga
答案 0 :(得分:8)
怎么样:
Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _
Encoding.GetEncoding(28591))
假设当你说“UTF8字符串”时你的意思是“二进制数据,它是某些文本的UTF-8表示”。如果您的意思是其他,请注明:)
请注意,ISO-8859-1仅占完整Unicode的一小部分。 IIRC,你最终会得到“?”对于源数据中ISO-8859-1中没有的任何字符。
答案 1 :(得分:3)
编码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
修改强>
正如Jon指出的那样,人们可能更容易记住十进制数字28591而不是十六进制数字和H6FAF。
答案 2 :(得分:1)
因为System.Text.Encoding.GetEncoding("ISO-8859-1")
不支持ñ
是我的猜测,在这种情况下,您需要为您使用其他编码类型的短信。
答案 3 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.text.encoding.convert.aspx
尝试使用变量“input”作为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);
答案 4 :(得分:0)
不知道是否应该在这里发布,但我在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
}