解决IO流获取数据为中文时,为����乱码

一道题: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();

你可能感兴趣的:(IO,android)