当前位置:  开发笔记 > 编程语言 > 正文

从字节转换unicode字符

如何解决《从字节转换unicode字符》经验,为你挑选了1个好方法。

在我们的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)buffer [m_index];

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

谢谢大家,很棒的回复!



1> Jon Skeet..:

您应该使用Encoding.GetString最合适的编码.

我完全不了解你的情况,但Encoding几乎可以肯定这个类是处理它的方法.

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

编辑:好的,我再看看你的代码:BitConverter.ToChar返回"由startIndex开头的两个字节组成的字符." 如果您只想使用一个字节,只需将其强制转换:

char c = (char) buffer[m_index];

我很惊讶你的代码一直在工作,因为它会在下一个字节非零时打破.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有