在Visual Basic 2010中将ucs-2转换为utf-8

时间:2018-07-21 14:30:50

标签: vb.net utf-8 ucs2

您好,我使用visual baisc 2010和usb调制解调器通过SerialPort“ AT + CUSD = 1”在命令“ ussd”上发送时,我的问题是当接收结果像这样的ucs-2时

  

+ CUSD:0,“” 00430075007200720065006E007400540069006D0065002000690073003A002000320031002D004A0055004C002D0032003000310038002000310036003A00320036“,72

我如何转换为utf-8

1 个答案:

答案 0 :(得分:3)

由于它的组成,它看起来像是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())

输出字符串为:

  

“当前时间是:2018年7月21日16:26”

要将其转换为UTF8(如果确​​实需要)(可能是Internet传输),请获取编码的字节数组:

Dim UTF8Bytes As Byte() = Encoding.UTF8.GetBytes(output)