再谈C#与C++通信之编码

在之前博客的文章当中当中忽略了对中文字符串的处理.例如以下代码:

1
2
string str = "我a";
return str.Lenght;

以上代码会返回2,乍一看似乎是没有错的,我们数据包head的lenght会被置为2. 然后我们的对端C++服务器会读取两字节的数据来,最后的结果会出现截断的情况,这是为什么呢? 因为在UTF-8里面我们汉字是占用的3字节空间,str的长度实际为4,所以我们在C#客户端发送数据的时候应该这样来获取字符长度.

1
2
3
4
public static int getLenght(string str,Encoding encode)
{
       return encode.GetByteCount(str);
}  
Built with Hugo
主题 StackJimmy 设计