[英]C# SerialPort Encoding conversion to byte[]
我知道我從串行端口(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
如您所見,在我的某個地方,µ char編碼錯誤。 這是代碼:
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);
我在哪里弄亂µ?
嘗試這個
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);
我相信0x3F字符實際上是一個問號。
嘗試將 port.Encoding 設置為Encoding.ASCII。 在調用port.ReadLine(); 之前設置此值。
否則,您可能必須讀取原始字節並尋找\\ r或\\ n。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.