Android中使用HttpConnection发送中文到服务器端乱码解决办法

来源:互联网 发布:淘宝仓库发货管理制度 编辑:程序博客网 时间:2024/05/18 19:36

最近在写一个简单地案例,是将二维码扫描的信息发送到服务器端,并存储到数据库。以前的测试都是用英文,没出什么问题,今天试了一下中文,却发现传到服务器端的全是乱码。
解决步骤:
1、服务器端是用PHP来写,所以在保证文件保存为utf-8格式的前提下,在加上头声明:header("Content-type: text/html; charset=utf-8"); 可乱码依旧,将服务器端获取到的乱码拿到,试图解码,发现并不行。
2、看来问题出在客户端。客户端是用 HttpURLConnection的连接,补上这两句connection.setRequestProperty("Accept-Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

设置了客户端的编码格式,包括检查项目的编码方式,都是utf-8。无奈寻求Google,最终发现问题
错误代码:

DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());                          outputStream.writeBytes(paramsStr.toString());

改正后:

DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());                         outputStream.write(paramsStr.toString().getBytes());

可以看出主要问题出在writeBytes()和write()这儿

void write(byte[] b) -------- 把参数b指定的字节数组中的所有字节写入到输出流中,将 b.length 个字节从指定的 byte 数组写入此输出流。
void writeBytes(String s) ----- 以字节序列的形式向文本中写入一个字符串,写入一个字节到底层流为1个字节的值。成功执行此方法该计数器加1递增。

在java中,中文为一个char,也就是两个字节16位,直接使用writeBytes,会丢弃高8位,只写入低8位的一个字节所以会造成中文乱码。而改正后的方式是先存入字节数组,然后再写入到输出流,不会乱码。

0 0
原创粉丝点击