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

Getting string in right format from byte array

我在将字节数组转换为正确格式的字符串时遇到问题。我通过 TCP 套接字读取字节数组,它给了我字节,其中一个字节是 byte 158。 如果我读取字符串:

Encoding.Latin1.GetString(data)

它给了我格式的字符串 “blahblah\u009eblahblah”。 \u009e 是字母 ž 的代码。 我需要的刺应该是 “blahblahžblahblah”。 我怎样才能得到正确格式的字符串?

已经尝试过其他编码,如 ACSII、UTF8 等。none 为我提供了正确的格式。

编辑 一些代码示例我如何获取数据以及我用它做什么:

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

Encoding.Latin1 在您的情况下不可用。真正的拉丁语 1 不包含 ž(带长音的拉丁文小写字母 Z)。

如果你想要Windows-1252,使用

Encoding.GetEncoding("Windows-1252").GetString(data)

这会将十进制值 158(十六进制 0x9E)的字节转换为小写 ž。


也可能"Windows-1250"你有。您希望在您的文本中出现哪些其他非英语字母?比较Windows-1252 and 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.