C # SerialPort Кодировка преобразования в байт [] - PullRequest
2 голосов
/ 18 августа 2011

я знаю, что я получаю некоторые данные в байтовом формате из последовательного порта (устройства GPS u-blox), которые должны выглядеть следующим образом:

Hex:        0xB5 0x62 0x01 0x21
ISO 8859-1: µ    b    1    !

Итак, я читаю строку s из командной строкии напечатайте в текстовом поле, и оно будет выглядеть так:

Tbx:        ?    b       !

Это выглядит нормально, так как текстовое поле не настроено на соблюдение кодировки.

Когда я пытаюсь преобразовать строкуНачиная с байтов (которые должны быть похожи на первую шестнадцатеричную строку), я получаю

Bytes(d):   63   98   1    33
Bytes(h):   0x3F 0x62 0x1  0x21

Как видите, µ-символ неправильно закодирован где-то на моем пути.Вот код:

string s = port.ReadLine();
System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");
System.Text.Encoding ascii = port.Encoding;

byte[] bASCII = ascii.GetBytes(s);
byte[] bICO = Encoding.Convert(ascii, iso_8859_1, bASCII);

Где я могу испортить µ?

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Попробуйте это

System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");
port.Encoding = iso_8859_1;

string s = port.ReadLine();

byte[] theBytes = iso_8859_1.GetBytes(s);
0 голосов
/ 18 августа 2011

Я считаю, что символ 0x3F на самом деле является вопросительным знаком.

Попробуйте установить порт. Кодирование в Encoding.ASCII.Установите это значение перед вызовом port.ReadLine ();

В противном случае вам, возможно, придется читать необработанные байты и искать \ r или \ n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...