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

  • 相关阅读:
    (转)typedef用法
    (转)在用户空间发生中断时,上下文切换的过程
    (转)内核中断,异常,抢占总结篇
    (转)中断上下文和进程上下文的区别
    (转)C中的volatile用法
    (转)gcc学习笔记
    (转)C系程序员面试必知必会之大端小端
    (转)我在北京工作这几年 – 一个软件工程师的反省
    (转)忠告
    Linux下VLAN功能的实现 (转)
  • 原文地址:https://www.cnblogs.com/ikuman/p/3659273.html
Copyright © 2011-2022 走看看