zoukankan      html  css  js  c++  java
  • java 中文乱码问题

    1.要记住的事实

     java的class文件是utf-8编码的,jvm使用utf-16,而java的字符串使用unicode编码

    2.java支持的字符集

     java支持的字符集可以通过java.nio.charset.Charset类查看到

    1 for(String key:Charset.availableCharsets().keySet()){
    2     System.out.println(key);
    3 }

    3.文件读取中的坑

    a.读取外部文件

    如果没注意外部文件的编码格式,我们的代码也没做处理的话,当默认的编码格式与文件的编码格式不一致时,就会出现中文乱码

    1     InputStreamReader in1 = new InputStreamReader(new FileInputStream("a.txt"));
    2     InputStreamReader in2 = new InputStreamReader(new FileInputStream("a.txt"), "UTF-8");

    这里的in1就会采用当前环境默认的编码格式去读取a.txt,而in2指定使用UTF-8去读取a.txt,清楚外部文件的编码格式比较重要(约定大于配置:-))

    获取环境默认的编码

    1 System.out.println(Charset.defaultCharset());

    win中一般系统默认的是GBK,IDE中是UTF-8

    b.字符串与字节数组

    常见转换方式是

    1     "test".getBytes();    

    实际上等价于

    1     "test".getBytes(Charset.defaultCharset());    

    字节数组到字符串

    1     new String("test".getBytes(Charset.defaultCharset()));    

    c.字符串迷局

    1     new String(input.getBytes("ISO-8859-1"),"Big5");

    说法1:把input字符串从ISO-8859-1编码方式转换成Big5编码方式

    说法2:我以为你给我的是Big5,你却给我ISO-8859-1,而系统只认识unicode

    4.如何跳过坑

    处理字符串及文件读写时,时刻清楚:字符串编码(unicode)、环境编码(UTF-8?GBK?)、外部文件编码

    自动检测文件编码:http://www.iteye.com/topic/108540

  • 相关阅读:
    面向使用的软件设计随笔13
    面向使用的软件设计随笔12
    面向使用的软件设计随笔11
    面向使用的软件设计随笔10
    面向使用的软件设计随笔09
    面向使用的软件设计随笔08
    面向使用的软件设计随笔07
    Tensorflow入门----占位符、常量和Session
    关于卷积
    tensorflow学习笔记
  • 原文地址:https://www.cnblogs.com/ikuman/p/3659273.html
Copyright © 2011-2022 走看看