将UTF8字符串编码为ISO-8859-1字符串(VB.NET)
我需要使用VB.NET将UTF8字符串转换为ISO-8859-1字符串。将UTF8字符串编码为ISO-8859-1字符串(VB.NET)
任何示例?
强调文本我曾尝试拉丁功能,而不是运行。我收到错误的字符串。
我的情况是我需要使用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
:
Dim converted as Byte() = Encoding.Convert(utf8, Encoding.UTF8, _
Encoding.GetEncoding(28591))
即假定当你说的“UTF8字符串”你的意思是“二进制数据是UTF-8的代表重刑的一些文字“。如果你的意思是别的,请说明:)
请注意,ISO-8859-1只代表完整Unicode的一小部分。 IIRC,你会以“?”结束对于来自ISO-8859-1中不可用的源数据的任何字符。
感谢您的“?”参考,它只是今天救了我。 – Hallaghan 2012-07-12 17:42:07
@jonskeet,我对你使用“tiny”这个词提出质疑。从技术上讲,你可能是正确的,但大部分Unicode对大多数应用程序来说都是不相关的。本页面有ISO-8859-1中的“完整覆盖”约30种现代语言列表。 Spoiler:其中之一是西班牙文:https://en.wikipedia.org/wiki/ISO/IEC_8859-1 – JoelFan 2017-09-01 18:23:53
@JoelFan:除非用西班牙文写作的人也想包括表情符号,或者不是' t *西班牙语,或来自不同语言的文字等。我认为一个仅限于ISO-8859-1的应用程序在现代世界中是相当有问题的。每当开发人员有选择时,我建议使用UTF-8。 – 2017-09-01 18:26:24
编码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。
为什么使用&H6FAF当十进制文字28591更容易记住(如果你知道你是在8859-1之后)? – 2009-09-30 17:06:03
@Jon,因为我使用了反射器,它输出的是十六进制数字:) – JaredPar 2009-09-30 17:12:14
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);
问题在VB.net中 – JaredPar 2009-09-30 17:05:30
因为System.Text.Encoding.GetEncoding("ISO-8859-1")
不支持ñ
是我的猜想,在这种情况下,你需要使用其他的编码类型为你的短信。
它包括 - – elgrego 2015-08-25 12:54:31
不知道这是否应该被张贴在这里,但我在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
}
没有。我没有得到任何解决方案在100%下运行良好。如果没有,我会标记为已解决...对不起... – aco 2012-03-15 15:08:29
不,我问,你有什么试过?这个“问题”只是要求某人告诉你该做什么,没有先前研究的证据。 – 2012-03-15 16:14:24
我不明白你的意思....只有我知道那个问题是在3年前开的! – aco 2012-03-15 17:02:49