gpt4 book ai didi

c# - 从字节转换 unicode 字符

转载 作者:太空狗 更新时间:2023-10-29 23:12:00 26 4
gpt4 key购买 nike

在我们的 API 中,我们使用 byte[] 通过网络发送数据。一切正常,直到我们的“外国”客户决定传递/接收 Unicode 字符的那一天。

据我所知,Unicode字符占用2个字节,然而,我们在字节数组中只为它们分配了1个字节。

下面是我们如何从 byte[] 数组中读取字符:

       // buffer is a byte[6553] and index is a current location in the buffer
char c = System.BitConverter.ToChar(buffer, m_index);
index += SIZEOF_BYTE;

return c;

所以当前的问题是当我查看 Unicode 十六进制时,API 正在接收一个奇怪的 Unicode 字符。我发现最后一个有效字节是正确的,但最高有效字节的值应该为 0。到目前为止,一个快速的解决方法是使用 0x00FF & c 来过滤 msb。

请建议处理来自套接字的 Unicode 字符的正确方法?

谢谢。

解决方案:

Jon 的荣誉:

char c = (char) 缓冲区[m_index];

正如他所提到的,它起作用的原因是因为客户端 api 接收到一个只占用一个字节的字符,而 BitConverter.ToChar 使用两个字节,因此在转换它时会出现问题。我仍然很惊讶为什么它适用于某些字符集而不是其他字符集,因为它在所有情况下都应该失败。

谢谢大家,很好的回复!

最佳答案

你应该使用 Encoding.GetString , 使用最合适的编码。

我不太了解您的情况,但是 Encoding 类几乎可以肯定是处理它的方式。

谁在控制这里的数据?您的代码,还是您客户的代码?您是否定义了正确的格式?

编辑:好的,我已经再次查看了您的代码:BitConverter.ToChar 返回“由从 startIndex 开始的两个字节组成的字符”。如果你只想使用一个字节,就转换它:

char c = (char) buffer[m_index];

我很惊讶您的代码一直在工作,因为只要下一个字节不为零,它就会中断。

关于c# - 从字节转换 unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557112/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com