从字节数组中获取正确格式的字符串



我有一个问题,将字节数组转换为正确格式的字符串。我在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.

最新更新