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

  • 相关阅读:
    c++——类 继承
    Pytorch Tensor, Variable, 自动求导
    Python-OpenCV实现二值图像孔洞填充
    神经网络手写数字识别numpy实现
    神经网络反向传播公式推导
    转:Markdown语法大全
    markdown居中对齐,左对齐,右对齐
    硬编码与软编码
    转:Markdown数学公式语法
    Python if __name__=='__main__'
  • 原文地址:https://www.cnblogs.com/ikuman/p/3659273.html
Copyright © 2011-2022 走看看