在我们的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使用两个字符,因此转换它的问题.我仍然很惊讶为什么它适用于某些角色而不是其他角色,因为它在所有情况下都应该失败.
谢谢大家,很棒的回复!
您应该使用Encoding.GetString
最合适的编码.
我完全不了解你的情况,但Encoding
几乎可以肯定这个类是处理它的方法.
谁在这里控制数据?您的代码或客户代码?您是否定义了正确的格式?
编辑:好的,我再看看你的代码:BitConverter.ToChar返回"由startIndex开头的两个字节组成的字符." 如果您只想使用一个字节,只需将其强制转换:
char c = (char) buffer[m_index];
我很惊讶你的代码一直在工作,因为它会在下一个字节非零时打破.