0

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

+CUSD: 0,"00430075007200720065006E007400540069006D0065002000690073003A002000320031002D004A0055004C002D0032003000310038002000310303"

我如何转换为 utf-8

4

1 回答 1

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

输出字符串为:

“当前时间是:21-JUL-2018 16:26”

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

Dim UTF8Bytes As Byte() = Encoding.UTF8.GetBytes(output)
于 2018-07-21T17:09:57.583 回答