javaweb中文乱码


一、文件乱码处理 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、通用 1.4、Javascript 传参乱码 在浏览器端对要传递的中文参数进行编码处理.代码如下: xmlhttp.open("POST",url,true); //请求参数初始化 xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urle ncoded"); //因为请求方式为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,具体配置如下页: Set Character Encoding filters.SetCharacterEncodingFilter encoding utf-8 Set Character Encoding /* 2.4、GET 提交方式中文乱码解决 通过修改 request.setCharacterEncoding(“UTF-8”);只能解决 POST 提交方式的请求编码, 对 GET 无效。 A、最简单解决方案: 该解决方案不再需要任何额外配置(如 filter) TOMCAT 默认 ISO-8859-1 因此可以设置默 认编码为 UTF-8 解决,在 conf\server.xml 文件中设置如下 B、在 tomcat4 之后,可以通过如下配置来解决中文乱码,但必须配置 filter 在 conf\server.xml 文件中设置如下 然后 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
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

lian819

贡献于2015-05-06

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf