Конвертировать UCS-2 в UTF-8 в Visual Basic 2010

Здравствуйте, я использовал Visual Baisc 2010 и USB модем для отправки по командам "ussd" SerialPort "AT+CUSD=1" моя проблема, когда получить результат получить ucs-2, как это

+CUSD: 0,"00430075007200720065006E007400540069006D0065002000690073003A002000320031002D004A0055004C002D0032003000310038002000310036003A00320036",72

как я могу конвертировать в UTF-8

1 ответ

Решение

Похоже, что эта строка из-за своей композиции имеет формат 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 июля 2018 16:26"

Чтобы преобразовать его в UTF8, если это действительно необходимо (возможно, передача через Интернет), получите закодированный массив байтов:

Dim UTF8Bytes As Byte() = Encoding.UTF8.GetBytes(output)
Другие вопросы по тегам