zoukankan      html  css  js  c++  java
  • android http通信之HttpURLConnection post乱码问题

          楼主前段时间做android项目,用到http通信,于是楼主本着练手的态度,自己写httpUrlConnection通信过程,然后在测试的时候,发现使用post请求一直乱码,这时候楼主开始看发送的数据,发现发送的数据是正确的,没有乱码,是utf-8的,然后又看服务器的代码,没错,也进行了转码的操作,那么,到底是哪出问题了呢?这个困扰了楼主好久,后来,楼主无意中发现,书中(第一行代码)进行通信时,post请求数据使用的是如下代码:

      

    ad(new Runnable() {
                @Override
                public void run() {
                    HttpURLConnection connection = null;
                    try {
                        URL url = new URL(address);
                        connection = (HttpURLConnection) url.openConnection();
                        connection.setRequestMethod("POST");
                        connection.setDoOutput(true);
                        connection.setConnectTimeout(8000);
                        connection.setReadTimeout(8000);
                        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
                        out.write(data.getBytes());
                        InputStream in = connection.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    
                        StringBuilder response = new StringBuilder();
                        String line;
    
                        while ((line=reader.readLine())!=null)
                        {
                            response.append(line);
                        }
    

      然而楼主在使用out.write(data.getBytes())时,写成了out.writeBytes(data)。可以说是非常微小的一个差别,那么当楼主将这行代码改完后,进行测试,发现乱码问题解决了,然后楼主就蒙了,什么鬼,这有两函数有区别吗???后来楼主查阅资料,发现这两函数的确有非常非常大的区别。

      前者是将data(string类型)转换为byte数组,然后传输。这个是没有问题的。那后者是怎么转换的呢,看下其源代码:

       这时候问题出现了,看s.length();对于中文,获得长度是字的长度,以下是验证截图:

      

      我们都知道,汉字的存储都是两个字节的,但是获得长度是3个,所以进行强转必定会出现截取调一部分数据,因此乱码,以下是实验截图:

  • 相关阅读:
    Python在信号与系统(1)——Hilbert兑换,Hilbert在国家统计局的包络检测应用,FIR_LPF滤波器设计,格鲁吉亚也迫使高FM(PM)调制
    HDU 4925 Apple Tree
    [ACM] HDU 3395 Special Fish (最大重量二分图匹配,KM算法)
    OCP解决问题053-16 MEMORY_TARGET
    图像归一化
    我毕业10年
    静态分析与动态分析
    逐步求精
    抽象与逐步求精
    自项向下,逐步求精
  • 原文地址:https://www.cnblogs.com/cmai/p/7355487.html
Copyright © 2011-2022 走看看