从字节数组中获取正确格式的字符串
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.
我在将字节数组转换为正确格式的字符串时遇到问题。我通过 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.