Java web中常见编码乱码问题(二)

根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例:

  案例分析:  

  2、输出流写入内容或者输入流读取内容时乱码(内容中有中文)

  原因分析:

    a、 如果是按字节写入或读取时乱码,应该先检测系统编码是什么样的,看看是否支持中文编码的字符集。  

    System.out.println(System.getProperty("file.encoding"));

    a1、如果是不支持中文的就要设置jvm编码了,设置方法:

    Windows环境就在catalina.bat配置:

   set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8

    Linux环境就在catalina.sh配置:

   JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=utf-8"

    设置好之后,应该就没什么大问题了。(注意:读取内容要转成字符串的形式,要指定字符集,如下图:

    a2、如果是支持中文编码的字符集,还出现乱码的话,首先要考虑a1中的注意事项,其次改换字符集为UTF-8,全面支持中文,

    不会有漏洞。

    

    b、如果是按字符写入或读取时乱码,那么写入和读取应指定同一字符集编码(推荐是UTF-8)。example: 

    //通过字符流来写入字符
       String charset = "UTF-8";
       FileOutputStream fout = new FileOutputStream("F:/test.txt");
       OutputStreamWriter writer = new OutputStreamWriter(fout, charset);//指定字符集编码
       writer.write("这就是本该拼搏的年纪,却想得太多,做得太少! ");
      
       //读取字节转换成字符
       FileInputStream fis = new FileInputStream("F:/test.txt");
       InputStreamReader reader = new InputStreamReader(fis, charset);//指定字符集编码
       StringBuffer content = new StringBuffer();
       char[] buf = new char[64];
       int len = -1;
       while ((len = reader.read(buf)) != -1) {
           content.append(buf, 0, len);
       }
       System.out.println(content.toString());

    如果没有指定就会获取系统编码,就有可能乱码,解决方法可以参照a。

 

    3、数据库乱码

      这种情况就很简单了,可以查看这篇博文MySQL 插入数据时,中文乱码问题的解决

    

    从上面可知,乱码问题并不难解决,搞清楚源头就好。其中要注意两个点,再次提醒:

    1、最好指定好系统默认编码,否则没有设置编码的时候会获取当前系统的编码。(当你在windows中不会乱码,但是移植到linux中就可能会出现乱码)

    2、设置好tomcat中uriencoding属性,配置全局编码过滤器会解决大部分请求数据乱码的问题。

 

转载于:https://www.cnblogs.com/yuanfy008/p/6978665.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值