我在將位元組陣列轉換為正確格式的字串時遇到問題。我通過 TCP 套接字讀取位元組陣列,它給了我位元組,其中一個位元組是位元組 158。如果我閱讀字串:
Encoding.Latin1.GetString(data)
它給了我格式為“blahblah\u009eblahblah”的字串。\u009e 是字母 ? 的代碼。我需要的刺痛應該是“blahblah ? blahblah”。如何以正確的格式獲取字串?
Alredy 嘗試了其他編碼,如 ACSII、UTF8 等。他們都沒有給我正確的格式。
編輯 一些代碼示例我如何獲取資料以及我用它做什么:
TcpClient client = new TcpClient(terminal.server_IP, terminal.port);
NetworkStream stream = client.GetStream();
stream.ReadTimeout = 2000;
string message = "some message for terminal";
byte[] msg = Encoding.Latin1.GetBytes(message);
stream.Write(msg, 0, msg.Length);
int bytes = stream.Read(data, 0, data.Length);
string rsp = Encoding.Latin1.GetString(data, 0, bytes);
EDIT2 所以,我不知道是什么問題......剛剛為 .NET Framework versoin 4.7.2 創建了一個新專案,在該專案中它作業正常。感謝大家的建議,感謝@Jeppe Stig Nielsen
uj5u.com熱心網友回復:
Encoding.Latin1在您的情況下不可用。真正的拉丁語 1 不包含 ?(帶有 CARON 的拉丁文小寫字母 Z)。
如果您想要 Windows-1252,請使用
Encoding.GetEncoding("Windows-1252").GetString(data)
這會將十進制值158(hex 0x9E) 的位元組轉換為小寫的 ?。
也可能"Windows-1250"是你有。您還期望文本中出現哪些其他非英語字母?比較Windows-1252和Windows-1250;它們通常是不同的,但都同意十六進制位元組0x9E(dec 158) 是 ?。
在 .NET Core 系統上,上述操作不能立即生效時,嘗試執行:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var goodText = Encoding.GetEncoding("Windows-1252").GetString(data);
查找型別CodePagesEncodingProvider可能需要對程式集System.Text.Encoding.CodePages.dll的參考。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324822.html
