zoukankan      html  css  js  c++  java
  • 乱码的简单认识和解决

    1 用什么编码保存文件 就用什么编码打开文件 比如  .txt 用utf-8 保存 就用 utf-8 打开 文件头上记录着编码方式
    2 java 程序主方法 的文件是什么编码 ,程序运行 默认就是什么编码 比如 mian方法所在用 ut-f 保存 程序启动 默认编码就是utf-8  用System.out.println(System.getProperty("file.encoding")); 测试
    3 乱码来源一般来源于程序之外 比如 数据库 浏览器 外部文件(IO)等,乱码的原因 编码不一致

     1 package com.test;
     2 import java.io.UnsupportedEncodingException;
     3 import java.net.URLDecoder;
     4 import java.net.URLEncoder;
     5 public class test {
     6     public static void main(String[] args) throws UnsupportedEncodingException {
     7 
     8         // 程序编码方式 和 mian所在的类的文件编码方式一致
     9         System.out.println("程序默认编码方式:" + System.getProperty("file.encoding"));
    10 
    11         // page
    12         String value = "孔";
    13         String value_encode = URLEncoder.encode(value, "utf-8"); // 浏览器把中文变成
    14                                                                     // utf-8形式传输
    15                                                                     // 可以查
    16                                                                     // utf-8对应表
    17         System.out.println("output:" + value_encode); // output:%E5%AD%94
    18 
    19         // tomcat
    20         String v = URLDecoder.decode(value_encode, "ISO-8859-1"); // tomcat 按
    21                                                                     // ISO-8859-1
    22                                                                     // 解码 就出错了
    23         System.out.println("tomcat:" + v); // ???
    24 
    25         // web servlet 中
    26         String s = URLEncoder.encode(v, "ISO-8859-1"); // 那么就反过来把结果用 ISO-8859-1
    27                                                         // 编码
    28         String jieguo = URLDecoder.decode(s, "utf-8"); // 编码后得结果就变回了
    29                                                         // %E5%AD%94(UTF-8)形式
    30                                                         // ,在按 utf-8编码解码
    31                                                         // 这个过程中并没有转成二进制补码形式
    32         System.out.println(jieguo);
    33 
    34         // ------------------------------------
    35         System.out.println("------------------------------------");
    36         byte[] s1 = v.getBytes("ISO-8859-1");// [-27, -83, -108]
    37                                                 // //这个时候乱码是ISO-8859-1编码,按ISO-8859-1转成二进制补码形式
    38                                                 // 和 用"孔"按"UTF-8"转是一样得,
    39         // 孔的utf-8编码形式%E5%AD%94 ,存储在计算机里二进制(补码)如--> [-27, -83, -108]
    40         byte[] s2 = "孔".getBytes("UTF-8"); // [-27, -83, -108]
    41         System.out.println(new String(s1, "UTF-8"));
    42         System.out.println("------------------------------------");
    43         /*
    44          * 字符 找到 utf-8得形式 二进制(补码) ”孔“ ->%E5%AD%94 --> [-27, -83, -108]
    45          * 
    46          * ”孔“ -> "utf-8" -> %E5%AD%94 -解码-> "ISO-8859-1" --> 乱码 -->
    47          * 按ISO-8859-1编码方式 拿到ISO-8859-1编码的二进制(补码)-->和”孔“ ->
    48          * "utf-8"编码的二进制(补码)是一样的 拿到ISO-8859-1编码的二进制(补码) 后按"utf-8"编码转成中文字符
    49          */
    50         // =======================================================
    51 
    52         String abc = "abc中国";
    53         byte[] bytes = abc.getBytes();
    54         for (byte b : bytes) {
    55             System.out.print(b + "  ");
    56         }
    57         System.out.println();
    58         String newabc = new String(abc);
    59         System.out.println(newabc);
    60         // Java文件编码为UTF-8:
    61         // 打印结果:
    62         // 97 98 99 -28 -72 -83 -27 -101 -67
    63         // abc中国
    64 
    65         // Java文件编码为GBK:
    66         // 打印结果:
    67         // / 97 98 99 -42 -48 -71 -6
    68         // abc中国
    69         // 注:java文件的编码可以通过选择java文件右键Properties——》Text file encoding 中进行设置
    70     }
    71 }
    View Code
  • 相关阅读:
    前端页面适配的rem换算
    Win10远程桌面 出现 身份验证错误,要求的函数不受支持,这可能是由于CredSSP加密Oracle修正 解决方法
    ES5, ES6, ES2016, ES.Next: What's going on with JavaScript versioning?
    国内的Android SDK镜像
    虚拟串口VSPD破解版 亲测win10 64可用
    Mybatis : "less than" issue in Select annotations
    如何在MyBatis中优雅的使用枚举
    Adding a custom jar as a maven dependency
    Error: Invalid or corrupt jarfile
    使用Json让Java和C#沟通的方法
  • 原文地址:https://www.cnblogs.com/kongxianghao/p/6848372.html
Copyright © 2011-2022 走看看