C# SerialPort 编码转换为字节[]

buh*_*ara 2 c# encoding serial-port

我知道我从串行端口(一个 u-blox GPS 设备)接收到一些字节格式的数据,应该是这样的:

Hex:        0xB5 0x62 0x01 0x21
ISO 8859-1: µ    b    1    !
Run Code Online (Sandbox Code Playgroud)

所以我从命令行读取字符串 s 并在文本框中打印,它看起来像:

Tbx:        ?    b       !
Run Code Online (Sandbox Code Playgroud)

这似乎很好,因为文本框没有配置为尊重编码。

当我尝试将字符串 s 转换为字节(它应该看起来像第一个十六进制行)时,我得到

Bytes(d):   63   98   1    33
Bytes(h):   0x3F 0x62 0x1  0x21
Run Code Online (Sandbox Code Playgroud)

如您所见,µ 字符编码错误,在我的某个地方。这是代码:

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);
Run Code Online (Sandbox Code Playgroud)

我在哪里弄乱了 µ?

dba*_*ett 5

尝试这个

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);
Run Code Online (Sandbox Code Playgroud)