zoukankan      html  css  js  c++  java
  • Android InputStream接收 字符串乱码 问题

    各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:
    1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
    2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
    各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。
    “UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。
    1、ISO-8859-1:
    最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 "ÖÐ"。
    反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。

    2、GB2312,BIG5,Shift_JIS,ISO-8859-2
    把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。
    反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 '中' 字。
    “ANSI 编码”的特点:
    1. 这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。
    2. “UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。

    3、UTF-8,UTF-16,UnicodeBig
    与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。
    与“ANSI 编码”不同的是:
    1. 这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
    2. “UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。【以上内容百度理解,具体看代码实现效果】
    服务端 基于java Servlet后台

    String result= "fial";
    String username=request.getParameter("username");
    String pwd=request.getParameter("password");
    if(username.equals("admin")&&pwd.equals("123456")){
    result="登入成功";
    }

    byte[] bytes = result.getBytes();
    String str = new String(bytes, "iso-8859-1");
    PrintWriter out=response.getWriter();
    out.write(str);


    Android 后台代码

    public String sendPost(String url, String params) {
    String result="";
    try {
    URL realurl = new URL(url);
    HttpURLConnection conn = (HttpURLConnection) realurl.openConnection();
    conn.setDefaultRequestProperty("Content-Type", "text/html;charset=utf-8");
    conn.setConnectTimeout(6000); // 设置超时时间
    conn.setRequestMethod("POST");
    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
    out.writeBytes(params);
    out.flush();
    out.close();
    InputStream in = conn.getInputStream();

    BufferedReader reader = new BufferedReader(new InputStreamReader(in,"GB2312"));
    String line = "";
    while ((line = reader.readLine()) != null) {
    // result=new String(line.getBytes("iso-8859-1"),"utf-8");
    result=line;

    }

    } catch (MalformedURLException eio) {
    result= eio.getMessage();
    eio.printStackTrace();
    } catch (IOException e) {
    result=e.getMessage();
    e.printStackTrace();
    }
    return result;
    }



    每一份坚持,以后都会有收获
  • 相关阅读:
    输入一个1-9的数i,再输入一个数字n,表示 i 出现的次数,输入的2个数字 i 和 n 组合成如下表达式:如i=2,n=4,2+22+222+2222=?,计算结果是多少?
    现有数列1/2;2/3;3/5;5/8······第十次出现的是什么?
    猜数游戏:范围时1-100,若错误就提示大了还是小了,猜对则结束,允许猜10次,游戏结束后对玩家评价:1次猜对;5次内猜对;10次内猜对;没有猜对
    登录模拟,用户名和密码输入错误后给出相关错误提示,并告知还有多少次错误机会,如果5次验证失败将冻结账户
    30人围坐轮流表演节目,按顺序数1-3,每次数到3的人就表演节目,表演过的人不再参加报数,那么在仅剩一个人没有表演的时候,共报数多少人次?
    docker 自定义镜像
    php 镜像richarvey/nginx-php-fpm的ngnix配置
    php tp5常用小知识
    php Tp5下mysql的增删改查
    php 面试常问问题
  • 原文地址:https://www.cnblogs.com/wilsons/p/6084993.html
Copyright © 2011-2022 走看看