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

  • 相关阅读:
    曾经收藏过的好文,唯快不破
    思想上的差距,各种差距,看完再说
    GO的初始简书(一)简介安装
    php 使用composer
    微信开发~又来一拨(本人崇尚开源)
    PHP 底层的运行机制与原理 --转
    关于cgi、FastCGI、php-fpm、php-cgi
    winows 服务器环境搭建 (碰到了windows服务器,小记一下吧~)
    python方法的重写
    python继承简介
  • 原文地址:https://www.cnblogs.com/ikuman/p/3659273.html
Copyright © 2011-2022 走看看