【发布时间】:2011-10-21 17:52:12
【问题描述】:
我目前正在处理的项目需要与我们不制作的客户端系统交互,因此我们无法控制数据的发送方式。问题是在 C# 中工作,它似乎对 UCS-2 没有任何支持,对大端序的支持也很少。 (据我所知)
我想知道的是,是否有我在 .net 中查看过的内容,或者其他人制作并发布的我们可以使用的内容。如果没有,我会尝试用自定义方法对其进行编码/解码,如果可能的话。
但无论如何感谢您的时间。
编辑: BigEndianUnicode 确实可以正确解码字符串,问题在于接收其他数据作为大端,到目前为止,按照其他地方的建议使用 IPAddress.HostToNetworkOrder() 允许我解码字符串的一半(Merli?是什么出现了,应该是Merlin33069)
我正在梳理短代码,看看是否还有我错过的另一个长度变量
解决方案: 在确定 bigendian 变量是主要问题后,我回顾并查看了详细信息,似乎字符串的长度是以字符数而不是字节数发送的(在 utf 中,char 似乎是两个字节)我需要做的就是把它翻倍,它成功了。谢谢大家的帮助。
【问题讨论】:
-
在大多数(不是全部)情况下,UCS-2 与 UTF-16 相同;你只是在寻找
Encoding.BigEndianUnicode吗?请注意,这实际上是 .NET 而不是 C# -
我强烈怀疑这个问题不是 UCS-2 和UTF-16 之间的区别。请提供一些示例数据来说明问题 - 显示原始字节,以及您期望解码后的文本是什么。
-
好吧,我发现了问题,客户端在java中,我们这边是c#,所以当他们发送字符串时 length 它也是 bigendian,所以当我们在 c# 中得到不同的长度。
-
所以现在的问题是弄清楚如何转换为发送/接收编辑我想我可以反转字节,对吧?
-
@Merlin 而不是 reversing 它们(在某些系统上可能不正确) - 我会简单地阅读它们并使用“移位”操作......将添加为答案
标签: c# .net endianness