【发布时间】:2014-03-20 15:22:38
【问题描述】:
短版
这是一个恒等函数吗?
f = (gₐ · hᵤ · gᵤ · hₐ)
地点:
-
hₐ是从字节到字符串的UTF-16 conversion, -
gₐ是从字符串到字节的UTF-16转换, -
gᵤ是Encoding.UTF8.GetBytes(), -
hᵤ是Encoding.UTF8.GetString(),
加长版
我正在使用 WebSocket4Net 在 C# 应用程序和 C# 服务之间通过 WebSockets 发送和接收消息。
有些消息是二进制的,我应该在与库交互时将它们从字符串转换为字符串,因为虽然它的Send() 方法可以发送字节数组,但它的MessageReceived 仅将接收到的消息作为字符串进行通信。
为了将字节转换为字符串并将字符串转换为字节,我遵循the answer by Mehrdad,其中使用了 .NET Framework 的内部编码,即 UTF-16。
另一方面,根据代码源(例如参见DraftHybi10Processor.cs, line 114),WebSocket4Net 使用 UTF-8 将字符串转换为字节,将字节转换为字符串。
它会引起问题吗?是否可能丢失数据?
【问题讨论】:
-
字符串到字节的转换(反之亦然)如何编码不可知?
-
Mehrdad 的回答非常有缺陷。他仍在使用编码,他只是在没有意识到的情况下使用 UTF-16 编码(并且由于字节顺序问题而扼杀了可移植性)。我看不出这比使用显式编码更好。此外,使用 UTF-8 编码 unicode-to-bytes 数组会浪费大量空间:)
-
@Luaan 已经死了......如果没有编码,您无法从字符串转换为字节。这是不可能的。
-
@MainMa:这个答案是一种非常危险的方式来做一件事。作为危险的证明,你根本不明白他在那里做什么。正如 Luaan 所说,“与编码无关的转换”没有意义。这不是转换,而是重新解释。
-
@jalf 未明确使用字符串中的编码仍在使用编码。当你在别处使用这些字节时,你完全被搞砸了,不知道为什么。