我有一个问题,将字节数组转换为正确格式的字符串。我在TCP套接字上读取字节数组,它给我字节,其中一个字节是字节158.如果我用:
读取字符串Encoding.Latin1.GetString(data)
它给我一个字符串格式"blahblah u009eblahblah"。u009e是字母的代码。我需要的刺应该是"blahblahžblahblah"。我怎样才能得到正确格式的字符串?
已经尝试了其他编码,如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版本4.7.2创建了一个新项目,在这个项目中运行良好。感谢大家的建议,感谢@Jeppe Stig Nielsen
Encoding.Latin1
在您的情况下不可用。真拉丁语1不包含*(拉丁小写字母Z WITH CARON)。
如果您想使用Windows-1252,请使用
Encoding.GetEncoding("Windows-1252").GetString(data)
这将把十进制值158
(十六进制0x9E
)的字节转换为小写的。
也可能是"Windows-1250"
。你还希望课文中出现哪些非英语字母?比较Windows-1252和Windows-1250;它们通常是不同的,但都同意十六进制字节0x9E
(dec158
)是。
当在。net Core系统上,上面的代码不能立即工作时,尝试执行:
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var goodText = Encoding.GetEncoding("Windows-1252").GetString(data);
查找类型CodePagesEncodingProvider
可能需要对程序集的引用system . text . encoding . copages .dll.