Java开发过程中中文乱码问题总结

转载 2015年06月19日 09:15:50

一、文件乱码处理

1、文件默认编码:默认使用项目的默认编码
右击文件->Properties->Resource->Text file encoding


2JSP文件编码:由于JSP要翻译为Servlet


   <%@ page language="java" pageEncoding="utf-8"%>




二、浏览器与服务器传输数据乱码处理


1浏览器端编码,一般由服务器端告诉浏览器如何解码数据:


1.1Servlet


    response.setContentType("text/html; charset=UTF-8"); 或者  response.setCharacterEncoding(“UTF-8”);


1.2JSP


    <%@ page language="java" contentType="text/html; charset=utf-8" %>


1.3、通用


    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">


1.4Javascript传参乱码


在浏览器端对要传递的中文参数进行编码处理.代码如下
       xmlhttp.open("POST",url,true); //请求参数初始化
       xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //因为请求方式为POST,所以这里要设置请求头.(如果请求方式为GET,此句代码可以省略)
       xmlhttp.send("name="+encodeURI(encodeURI("星期日"))); //向服务器端发送参数
在服务器端代码:


页面jsp保证是utf-8编码


<%@ page contentType="text/html; charset=utf-8"%>


接受中文参数
       PrintWriter out = response.getWriter(); //得到response的输出流对象 
       String name1 = request.getParameter("name"); //得到KEY"name"的请求参数 
       String name = URLDecoder.decode(name1,"utf-8"); //对得到的参数进行解码 
       out.print(name); //向浏览器端发送数据


1.5热链接传参乱码


在传参的jsp对中文进行编码:href="new.jsp?name=java.net.URLEncoder.encode("链接")";


在接受的jsp对中文进行转码:String str = URLDecoder.decode(request.getParameter("name "), "utf-8");


注:浏览器编码可以由我们手工修改,但最后不要这样,一般让浏览器自动选择即可。




2、服务器端编码,将客户端传过来的数据进行解码: 
浏览器默认使用ISO-8859-1进行编码数据,然后将数据传输到服务器,因此我们默认只需要将浏览器发送过来的数据转换为我们需要的编码即可。


2.1、最简单方式:


    String username = request.getParameter(“username”);


    username = new String(username.getBytes("ISO-8859-1“), "UTF-8");


2.2、比较好的解决方案
// 
必须在获取参数之前,调用如下方法先解码 request.setCharacterEncoding(“UTF-8”);


String username = request.getParameter(“username”);



2.3、比较通用方案:在一个Filter中更改所有请求的编码方式:


A、在src中添加filter来设置编码格式是中文,filter类可以在tomcat的包里面:apache-tomcat-6.0.16.zip\apache-tomcat-6.0.16\webapps\examples\WEB-INF\classes\filters下面,SetCharacterEncodingFilter.java文件 
B、在web.xml中配置
filter,具体配置如下页:


<filter>


        <filter-name>Set Character Encoding</filter-name>


        <filter-class>filters.SetCharacterEncodingFilter</filter-class>


        <init-param><param-name>encoding</param-name>


       <param-value>utf-8</param-value></init-param>


</filter>


<filter-mapping>


        <filter-name>Set Character Encoding</filter-name>


        <url-pattern>/*</url-pattern>


</filter-mapping>



2.4GET提交方式中文乱码解决


通过修改request.setCharacterEncoding(“UTF-8”);只能解决POST提交方式的请求编码,对GET无效。


A、最简单解决方案:
解决方案不再需要任何额外配置(如filter) TOMCAT默认ISO-8859-1 因此可以设置默认编码为UTF-8解决,在conf\server.xml文件中设置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=”UTF-8”/>


B、在tomcat4之后,可以通过如下配置来解决中文乱码,但必须配置filter 
在conf\server.xml文件中设置如下 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI=“true”/> 
然后request.setCharacterEncoding(“UTF-8”)也可解决GET乱码



3Java与数据库之间的乱码:
  大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如mysql驱动:


jdbc:mysql://localhost/MYAPPS?useUnicode=true&characterEncoding=GBK


或者使用JAVA程序,修改编码,程序如下:


public class Convert {


  public static String ISOtoGB(String iso){
  String gb;
  try{
    if(iso.equals("") || iso == null){
      return "";
    }
    else{
      iso = iso.trim();
      gb = new String(iso.getBytes("ISO-8859-1"),"GB2312");
      return gb;
    }
  }
  catch(Exception e){
    System.err.print("
编码转换错误:"+e.getMessage());
    return "";
    }
  }
}




4Java与文件/流之间的乱码:
  Java读写文件最常用的类是FileInputStream / FileOutputStream和FileReader / FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader / OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

终结解决Java Web开发过程中的中文乱码问题

网上很多关于Java Web开发过程中的中文乱码问题,我们前端后端都设置为UTF-8的编码,最后还是会发生乱码问题。1、不同浏览器造成的问题IE和Chrome会对URL的参数作不同的处理,比如,我们在...

java web开发过程中,中文乱码问题

在解决中文乱码之前,我们先来看看jsp文件中charset与pageEncoding的区别:          1.首先,charset是指服务器发送给客服端时的内容编码,charset=utf-8...

java web学习过程中偶遇的中文乱码问题

java web 开发学习过程中遇到的中文乱码问题; 使用servlet从mysql数据库中取出数据显示jsp 网页时出现的中文乱码--(乱码为????)...

SpringMVC开发过程中的中文乱码问题

相信大家在开发初期遇到中文乱码问题一定是一头雾水,不是数据库乱码了就是页面乱码了或者传值时乱码。其实解决乱码的途径很简单,就是统一编码与解码的类型,我把自己遇到的乱码问题整理出来,希望能够对大家有用。...

Java开发,表单提交中发生中文乱码的问题

http://hi.baidu.com/studyaspnet/item/ecd636f4c87d9009d89e729c Java开发,表单提交中发生中文乱码的问题。 W...
  • cynhafa
  • cynhafa
  • 2012年11月13日 20:13
  • 2636

java开发过程中对于乱码问题的解决方法

最近在做项目的时候由于要用到一个日志的功能,然后将操作日志写到文件中,最后定时从日志中读取文件写到数据库中,由于在定时任务中用到了RandomAccessFile记录日志的增量部分,所以产生了在用Ra...

php和mysql交互过程中的中文乱码问题

PHP中文乱码是PHP开发中的常见问题之一。PHP中文乱码有 时发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关。下面进行一番总结。 一.首先是PHP网页的编码 最好最快的解决办...

SSH整合过程中中文乱码问题的解决方案(以mysql数据库为简单案例)

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

Scrapy使用过程中的中文乱码问题

在使用scrapy抓取微博的话题时,抓取到了一个中文字段(用变量a表示),无论使用何种编码方式都无法正确显示,如下所示: 查看a的编码后,确认是unicode编码,具体值如下所示: 直接pri...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java开发过程中中文乱码问题总结
举报原因:
原因补充:

(最多只允许输入30个字)