再谈一下Android下SOCKET通讯的编码问题

近日,我在学习Android网络通讯的时候遇到了字符集编码问题。

我的客户端:java.net.Socket   

我的服务端:System.Net.Sockets 

我在经过测试后,发现C#下的SOCKET在接收与发送时都是以字节流的形式传输的,所以发送方与接收方的字节编码一定要一致才行。

一、第一种情形

Android端:

InputStream in = socket.getInputStream();

PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"gb2312")), true);

C#服务端:

string result = System.Text.Encoding.Default.GetString(socketData.dataBuffer);

我原来一直使用System.Text.Encoding.Default来处理接收到字节流,开始时都正常,Default==“gb2312”。但后来我把Android端的输出流也改为了字节流的形式后,服务端总是接收到乱码,后来发现是字节编码不一致造成的。


二、第二种情形

Android端:

DataInputStream in = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 

发送:

try {
                    byte[] datas = msg.getBytes("utf-8"); 
out.write(datas,0,datas.length);
} catch (IOException e) {
e.printStackTrace();
}

接收:

int result = in.available();
while (result == 0) {
result = in.available();
}
byte[] data = new byte[result];
in.read(data);
String content = new String(data, "utf-8");


C#服务端:

接收

string result = System.Text.Encoding.UTF8.GetString(socketData.dataBuffer);

发送

byte[] byData = System.Text.Encoding.UTF8.GetBytes(msg);

soket.Send(byData);


通过上述的实验证明,为了确保在不同的平台下,客户端输入的中文可以被正确地解析、保存、读取。最好的办法就是使用UTF-8编码。

在Android端和服务端显式的声明编码方式即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值