最近的工作在做Android手机端和C#桌面端通过蓝牙交互方面的活,碰到了一个问题,咱们今天来简单回顾下。
在C#端将字符串转换为常规的字节流,在Android端获取到字节流后,直接进行转换为字符串,发现出现乱码的情况。很纳闷,奇了怪了,不应该呀,这么简单的操作咋可能出现乱码呢。.
查找资料发现,原来是JAVA和C#在对于字符串的编码问题上,存在差异。
这里强调大家,别用C#的思维去写Android的代码,有时候总会出现奇怪的问题。
在查找了资料后,确定对于字符串部分采用传统的ASCII格式来传输字节流。
C#端
//actionJob为待传输的字符串
dataBytes.AddRange(Encoding.ASCII.GetBytes(actionJob));
Android端
//m_streamBuf中是接收到的字节流
StringBuffer sb=new StringBuffer();
int actionJobLength=m_streamBuf.getShort();
char[] tChars=new char[actionJobLength];
for (int i=0;i<actionJobLength;i++){
tChars[i]=(char)m_streamBuf.get();
}
sb.append(tChars);
realTimeLocationData.dbActionJob=sb.toString();
这些知识是很简单的常识性问题,当我们在处理或者长时间没有使用的时候就会出现遗忘,那么隔一段时间来看看这些基础知识,有助于我们在解决更复杂问题时更游刃有余。