android默认socket通信编码是utf8,这时为了支持多国家。
国内预装的windows操作系统编码是GB2312,一般在PC机编写的应用程序并且运行在该PC机上如果没有特意指定编码都是GB2312。
不同的编码如果传输的是英文字母等不会出现乱码,如果是汉字就是乱码
utf8中汉字的表示方法为3个字节
例如汉字“啊”,GB2312编码为 B0 A1
utf8编码为 E5 95 8A
一般来讲,一个汉字的编码可以这样获取
String s = "啊";
byte[] b = s.getBytes("GB2312");
这样b数组中存的就是汉字”啊“的gb2312编码,即E5 95 8A。
实际通信中,可以利用BufferedReader实现自动转码
Socket mSocketClient = new Socket();
BufferedReader mBufferedReaderServer = null;
BufferedReader mBufferedReaderClient = null;
mBufferedReaderClient = new BufferedReader(new InputStreamReader(mSocketClient.getInputStream(),"GB2312"));
mPrintWriterClient = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocketClient.getOutputStream(),"gb2312")), true);