在 Visual Basic 2010 中将 ucs-2 转换为 utf-8
convert ucs-2 to utf-8 in visual basic 2010
你好,我使用 visual baisc 2010 和 usb 调制解调器通过串行端口发送命令“ussd”"AT+CUSD=1"我的问题是当接收结果像这样得到 ucs-2 时
+CUSD: 0,"00430075007200720065006E007400540069006D0065002000690073003A002000320031002D004A0055004C002D0032003000310038002000310036003A00320036",72
如何转换为 utf-8
看起来那个字符串,因为它的组成,是 BigEndianUnicode 格式。
此编码格式可从 .Net FW 3.5+ / VS 2008 获得。
不过,使用的 .Net 版本比 Visual Studio 版本更重要。
那么,让我们尝试解析这个字符串,看看它会产生什么。
Dim input As String = [SerialPortOutput]
input = input.Replace(ChrW(34), "")
Dim ucs2 As String = input.Split(","c)(1)
Dim HexBytes As List(Of Byte) = New List(Of Byte)()
For i As Integer = 0 To ucs2.Length - 1 Step 2
HexBytes.Add(Byte.Parse(ucs2.Substring(i, 2), NumberStyles.HexNumber))
Next
现在,将字节列表从 BigEndianUnicode
转换为标准的 .Net 字符串。
Dim output As String = Encoding.BigEndianUnicode.GetString(HexBytes.ToArray())
输出字符串为:
"CurrentTime is: 21-JUL-2018 16:26"
要将其转换为 UTF8,如果确实需要(可能是互联网传输),请获取编码的字节数组:
Dim UTF8Bytes As Byte() = Encoding.UTF8.GetBytes(output)
你好,我使用 visual baisc 2010 和 usb 调制解调器通过串行端口发送命令“ussd”"AT+CUSD=1"我的问题是当接收结果像这样得到 ucs-2 时
+CUSD: 0,"00430075007200720065006E007400540069006D0065002000690073003A002000320031002D004A0055004C002D0032003000310038002000310036003A00320036",72
如何转换为 utf-8
看起来那个字符串,因为它的组成,是 BigEndianUnicode 格式。
此编码格式可从 .Net FW 3.5+ / VS 2008 获得。
不过,使用的 .Net 版本比 Visual Studio 版本更重要。
那么,让我们尝试解析这个字符串,看看它会产生什么。
Dim input As String = [SerialPortOutput]
input = input.Replace(ChrW(34), "")
Dim ucs2 As String = input.Split(","c)(1)
Dim HexBytes As List(Of Byte) = New List(Of Byte)()
For i As Integer = 0 To ucs2.Length - 1 Step 2
HexBytes.Add(Byte.Parse(ucs2.Substring(i, 2), NumberStyles.HexNumber))
Next
现在,将字节列表从 BigEndianUnicode
转换为标准的 .Net 字符串。
Dim output As String = Encoding.BigEndianUnicode.GetString(HexBytes.ToArray())
输出字符串为:
"CurrentTime is: 21-JUL-2018 16:26"
要将其转换为 UTF8,如果确实需要(可能是互联网传输),请获取编码的字节数组:
Dim UTF8Bytes As Byte() = Encoding.UTF8.GetBytes(output)