我知道我从串口(u-blox GPS设备)收到一些字节格式的数据,应该是这样的:
Hex: 0xB5 0x62 0x01 0x21
ISO 8859-1: µ b 1 !
所以我从命令行读取一个字符串s并在文本框中打印,它看起来像:
Tbx: ? b !
这似乎很好,因为文本框未配置为尊重编码。
当我尝试将字符串s转换为字节(应该看起来像第一个十六行)时,我得到了
Bytes(d): 63 98 1 33
Bytes(h): 0x3F 0x62 0x1 0x21
如您所见,μcog错误编码,在我的路上。 这是代码:
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);
我在哪里搞砸μ?
答案 0 :(得分:4)
试试这个
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);
答案 1 :(得分:0)
我相信0x3F字符实际上是一个问号。
尝试设置 port.Encoding to Encoding.ASCII。在调用port.ReadLine();
之前设置此值否则,您可能必须读取原始字节并查找\ r或\ n。