一、文件乱码处理
1、文件默认编码:默认使用项目的默认编码
右击文件->Properties->Resource->Text file encoding
2、JSP文件编码:由于JSP要翻译为Servlet
<%@ page language="java" pageEncoding="utf-8"%>
二、浏览器与服务器传输数据乱码处理
1、浏览器端编码,一般由服务器端告诉浏览器如何解码数据:
1.1、Servlet
response.setContentType("text/html; charset=UTF-8"); 或者 response.setCharacterEncoding(“UTF-8”);
1.2、JSP
<%@ page language="java" contentType="text/html; charset=utf-8" %>
1.3、通用
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
1.4、Javascript传参乱码
在浏览器端对要传递的中文参数进行编码处理.代码如下:
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.4、GET提交方式中文乱码解决
通过修改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乱码
3、Java与数据库之间的乱码:
大部分数据库都支持以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 "";
}
}
}
4、Java与文件/流之间的乱码:
Java读写文件最常用的类是FileInputStream / FileOutputStream和FileReader / FileWriter。其中FileInputStream和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用FileReader和FileWriter的父类:InputStreamReader / OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。
参考文献:http://sishuok.com/forum/blogPost/list/306.html
http://blog.sina.com.cn/s/blog_5bd6b4510101277p.html
相关推荐
中文乱码javaWEB开发各种解决中文乱码问题
关于处理Javaweb中中文乱码的问题文.pdf
教学案例:解决中文输出乱码问题 1.所属课程: Java Web开发技术 2.相关技能点 HttpServletResponse setCharacterEncoding(String charset) setHeader(String name,String value) setContentType(String type) 2.训练...
中文乱码问题是JavaWeb开发中最常见的问题之一,解决的方法也有很多种,其中,过滤器是最常用的方法之一。提供了过滤器的源码和详细配置。
关于处理Javaweb中中文乱码的问题[收集].pdf
利用过滤器解决JavaWeb(JSP)的乱码问题
解决JavaWeb开发中Jsp存储读取MySQL数据中文乱码的问题.pdf
对javaweb中文乱码原理解析和各种情况下的解决方案。
JavaWeb开发中的中文乱码问题分析及解决方案.docx
JavaWeb开发技术-解决中文输出乱码问题.pptx
超全面javaweb第4天-_05_xml的中文乱码问题解决
JavaWeb的各种中文乱码终极解决方法 JavaWeb的各种中文乱码终极解决方法
在JavaWeb应用开发常见的问题中,中文的乱码问题在页面中没有统一的方法解决,造成程序员浪费大量的时间与精力且代码效率不高,因此提出了新的乱码算法,并设计了通用的乱码处理器,提高了程序员的工作效率。
讲述javaweb开发中的jsp乱码问题 get、post的区别 http协议的图解
javaweb里用来处理页面中文的,解决中文乱码问题
开发中前台页面向后台传参,汉字乱码,看了好多网上的方法都解决不了,所以写了一个工具类,判断是乱码就转换,不乱码就不乱换,汉字字母符号自动判断。最后完美解决汉字乱码问题。
有关于当安装maven成功后javaweb会出现几个乱码问题,都会解决。 想解决java中文乱码问题也得了解一下我们常用的编码方式: ASCII编码是目前计算机中用得最广泛的字符集及其编码。 ISO8859-1可以表示的是西欧语言。...
主要给大家介绍了关于JavaWeb乱码问题的终极解决方案,文中通过示例代码介绍的非常详细,对大家学习或者使用JavaWeb具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
懒得考虑各种字符编码问题了,用了一个比较暴力的方法,不只中文,所有双字节文字都可以避免乱码问题。