一道题:android通过串口用ZigBee与PC端通信,聊天。
*gbk编码以utf-8的方式显示>出现菱形加问号 ��ӭ�����һ��������
*utf-8编码以GBK的方式显示> 鐧婚檰鎴愬姛鍟� 鍝堝搱鍝�
*一个悲剧>烤斤烤斤烤斤 //别人的码表被你以其他的方式打开,数据已经丢失了,有些二进制是空字符,也变成这样,所以 //只能重写
来源
因为乱码出现的是��所以(发送的是 你),我觉得是第一个,于是一开始用gbk格式,但后面发现还是出现乱码,不过这次出现的是分开两次打印的(就是第一次打印 �,第二次打印 �),于是便去用按钮读取一次
按钮单击:
case R.id.button2:
finish();
byte[] buf=new byte[1024];
int d;
while((d=inputStream.read(buf))!=-1){
String dalta=new String(buf,0,d,"gbk");
Log.i("text",dalta);
}
break;
发现成功打印出来了。后面查看了一下,觉得是因为用while循环太快的原因(因为要不断接受PC端发的消息)。然后加了一个休眠就行了。
下面是读取消息的线程:
new Thread(() -> {
List<Integer> list=new ArrayList<>();
StringBuffer buffer=new StringBuffer();
while (true){
try {
if (inputStream.available()!=0) {
//判断是否有数据
byte[] buf = new byte[1024];
int d;
while ((d = inputStream.read(buf)) != -1) {
String dalta = null;
dalta = new String(buf, 0, d, "gbk");
Log.i("text", dalta);
Message message=new Message();
message.obj=dalta;
handler.sendMessage(message);
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();