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属性,配置全局编码过滤器会解决大部分请求数据乱码的问题。

时间: 2024-12-19 16:31:49

Java web中常见编码乱码问题(二)的相关文章

java web中的中文乱码问题——浏览器与服务器之间的中文乱码

一. 乱码产生原因 浏览器在向服务器发送请求时会对携带的请求参数进行编码(UTF-8格式),服务器在接收到请求参数时会对其进行解码,由于浏览器与服务器编码格式不同产生乱码.不同服务器默认编码格式不同,Tomcat默认ISO-8859-1. 二. get.post请求方式乱码解决方案--简单版 1. get请求 get请求有三种解决方案. a. 通过先编码再解码方式.服务器以不同编码格式解码后导致乱码,此时可以通过先以与服务器相同的编码格式将字符串编码成原始的字节流,再通过String类的构造方法

深入分析Java Web中的编码问题

编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节,一个字节是8bit.一个字节的范围是0~255. 人类要表示的符号肯定比256个多,所以无法用一个字节来表示这个多的符号. 你想想,光汉字就有几千个. 要解决这个矛盾,有了一个新的数据结构:char.char也就是字符,最长16bit,最短为8bit.一个字符的最大长度是16bit.一个字符的范围是

JAVA web 中文传参乱码解决方案:(最简洁方案)

一般修改Tomcat的默认编码方式即可: 例如:Tomcat的默认编码修改方式: 修改%TOMCAT_HOME%/conf/server.xml,找到这行代码: <Connector port="8080" protocol="HTTP/1.1" redirectPort="8449" connectionTimeout="20000"/>在后面可以追加URIEncoding属性,例如: <Connector

深入分析Java Web中的中文编码问题

要对Java Web项目进行编码原因: 1.在计算机中存储信息的最小单位是1个字节,即8个bit,所以能表示的字符范围是0~255个. 2.电脑需要表示的符号太多.无法用1个字节完全表示. 要解决这个问题,必须要有一个新的数据结构char,而从bit到char就要进行编码. 常见的编码格式: 1.ASCII码 总共128个,用1个字符的低7位表示,0~31是控制字符,如换行.回车.删除等.32~126是打印字符,可以通过键盘输入并且表示出来 2.ISO-8859-1 ISO组织在ASCII的基础

Java Web中涉及的编解码

用户从浏览器发起一个HTTP请求,存在编码的地方是URL.Cookie.Paramiter.服务器端接收到HTTP请求后要解析HTTP协议,其中URL.Cookie和POST表单参数要解码,服务器端可能还需要读取硬盘数据(数据库.文件),这些数据都可能存在编码问题.当Servlet处理完所有请求的数据后,需要将这些数据再编码通过Socket发送到用户请求的浏览器里,再经过浏览器解码成为文本.这些过程用图表示如下: 1.URL的编解码 为了验证浏览器是怎么编码URL的,我们选择FireFox浏览器

java web中servlet、jsp、html 互相访问的路径问题。

在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可以分两种情况,当然啦两者使用相对路径是一致,本文只说绝对路径. 情况一.指向外部的web组件和本身关系不大的,这一类的有:html中使用路径的标签,比如<a>标签中的href;servlet和jsp中的重定向sendRedirect(path); 情况二.指向内部的web组件和本身有关系的,这一类我暂时看到的有:servlet或者jsp的转发 假设在myapp项目下有

jQuery框架+DWR框架实现的Java Web中的Ajax效果(异步请求,局部刷新)

一 简介和实现效果 这里用一个小例子来简单举例说明,做一个搜索引擎搜索提示效果,通过不断输入字符,然后在下方给出搜索提示.效果图如下: 通过上图可以看到,当输入一个"a"时,提示了很多内容,然后继续输入一个"e"后,提示的范围明显就变小了. 注:在文末我会给出完整源代码的下载链接,以供大家参考 二 具体实现 1 在eclipse for java ee中创建一个Java Web工程,然后导入相应的jar包,特别说明的是:这里要导入一个额外的dwr.jar.也就是说,

java web中路径问题。

转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可以分两种情况,当然啦两者使用相对路径是一致,本文只说绝对路径. 情况一.指向外部的web组件和本身关系不大的,这一类的有:html中使用路径的标签,比如<a>标签中的href;servlet和jsp中的重定向sendR

CKEditor4 在java web中的应用说明(详细可行)

按照官方的说明书就可,这里主要注意一点!! 就是<script src="../ckeditor.js"></script>中js文件的路径问题,我的ckeditor文件夹是在WebContent文件夹下,jsp文件是同一层目录的,所以最后的代码应该是 <script type="text/javascript"src="./ckeditor/ckeditor.js"></script> 注意斜杆号