Конвертировать 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)