问题描述
- Android系统socket通信字节乱码。
- 编写了android socket通信的软件,可以和主机通讯互相收发数据。但是一个字节的数据超过0x80就会乱码,也就是说如果数据小于128,那么正常超过就会乱码。请问这是哪里有问题。我确认硬件没有问题,换了设备也是可以的。
public class Tcp40Activity extends Activity { /** Called when the activity is first created. */ Button BnSend; EditText EtSend; TextView TvRev ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); BnSend = (Button) findViewById(R.id.BnSend);//得到布局中的按钮引用 EtSend = (EditText) findViewById(R.id.MsgText); TvRev = (TextView) findViewById(R.id.RevText); BnSend.setOnClickListener(BnSendListen); } private View.OnClickListener BnSendListen=new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub char[] a ={0xF10x030x100x000x000x080x540x3C}; String str =String.valueOf(a);//String.copylueOf(a); Socket s=null; DataOutputStream dout=null; DataInputStream din =null; try { s =new Socket(""192.168.1.1""8080); dout =new DataOutputStream(s.getOutputStream()); din =new DataInputStream (s.getInputStream()); Thread.sleep(50 0); //实际中刚连上后发数据需要一定延时 确保双方链接初始化完成 dout.writeBytes(str); dout.flush(); //刷新缓存 发送数据 /*50秒内等待反馈*/ for(int i=0;i<100;i++) { if(din.available()>0) { byte[] buffer=new byte[din.available()]; System.out.println(din.available()); din.read(buffer); TvRev.setText(""服务器发来的消息:""+str2HexStr(new String(buffer))); break; } else Thread.sleep(500 0); }; } catch(Exception e) { e.printStackTrace(); } finally { try{ if(dout != null){ dout.close(); } if(din != null){ din.close(); } if(s != null){ s.close(); } } catch(Exception e){ e.printStackTrace(); } } } }; //16进制转换的显示测试 public static String str2HexStr(String str) { char[] chars = ""0123456789ABCDEF"".toCharArray(); StringBuilder sb = new StringBuilder(""""); byte[] bs = str.getBytes(); int bit; for (int i = 0; i < bs.length; i++) { bit = (bs[i] & 0x0f0) >> 4; sb.append(chars[bit]); bit = bs[i] & 0x0f; sb.append(chars[bit]); sb.append(' '); } return sb.toString().trim(); } }
解决方案
byte[] bs = str.getBytes();这句加上编码UTF-8呢byte[] bs = str.getBytes(""UTF-8"");
解决方案二:
超过0x80就会乱码,会不会接收端字符编码的问题,或显示的问题。
Sokcet 发送与接收与数据是否大于 0x80 没有关系。
解决方案三:
你在双方都添加编码进去呢。
解决方案四:
字符编码查过ASCII码了,所以解码失败
解决方案五:
编码要统一,所有的乱码都是编码不统一造成的。
时间: 2024-09-08 21:19:27