您的位置 首页 java

Java编程中文乱码问题

Tomcat对于GET请求并不会考虑使用 request .setCharacterEncoding方法设置的 编码 ,而会永远使用 ISO-8859-1 编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成 字符串

Java web开发过程中,中文乱码是一个老生常谈的话题了,那么该如何解决呢?

大致思路就是重新编码为 GBK 或者gb2312,分两种情况

a是get和post形式

b是ajax 形式

c是javascript url传参乱码问题

d是java web 下载文件名乱码问题

e是utf8解决 JSP 中文乱码问题

第一种:GET和POST,取决于你的页面编码,如果你的页面编码为iso8859_1

使用:String str= new String(req.getParameter(“str”). toString ().getBytes(“iso8859_1”), “GBK”);

或者 String str= new String(req.getParameter(“str”).toString().getBytes(“iso8859_1”), “GB2312”);

但是,这里要注意,必须保证你的页面编码也是iso8859_1的,因为,上面的代码的意思是先将你的字符串变为iso8859_1字节流,

然后再转化为GBK编码,如果你页面传过来的编码是 UTF-8 ,那么按照上面的方法就会出现:???乱码

你页面是utf-8的,就要使用如下编码:

String str= new String(req.getParameter(“str”).toString().getBytes(“utf-8”), “GBK”);

或者 String str= new String(req.getParameter(“str”).toString().getBytes(“utf-8”), “GB2312”);

总之get post 原则很简单,页面什么编码就转化什么字节流转化编码

第二:Ajax传值

这个比较麻烦,据测试,不同的浏览器有不同的对中文编码,怎么办呢?

我们可以采用js的encodeURI()进行统一的编码,然后在后台进行统一的解码

对应的 java 解码代码:

str= java.NET.URL decode r.decode(str, “UTF-8”);

当然,因为他是utf-8编码,所以也可以采用第一种get post 介绍的方法解码(据测试,用String(req.getParameter(“str”).toString().getBytes(“utf-8”), “GB2312”)解码js的encodeURI()时,会出现乱码,所以还是老老实实的使用java.Net.URLDecoder.decode(str, “UTF-8”);)

不好意思,刚刚查了资料,上面讲的Get方式有错:

Tomcat对于GET请求并不会考虑使用request.setCharacterEncoding方法设置的编码,而会永远使用iso-8859-1编码,而这位朋友使用的正好是GET请求,因此,tomcat将会使用iso-8859-1将提交的字节转换成字符串。

所以,对于使用get方式传值的时候,统一使用String str= new String(req.getParameter(“str”).toString().getBytes(“iso8859_1”), “GBK”);当然,前提是你服务器是tomcat

第三: javascript url传参乱码问题

方案一 html页面:

function testOne() {

var url = “testTwo.action?expr=”+你好;

window.location.href = encodeURI(url);

}

后台java代码:

String expr = new String(

request.getParameter(“expr”).getBytes(“ISO-8859-1″),”UTF-8”);

方案二 html页面:

function testTwo() {

var url = “testTwo.action?expr=”+你好;

window.location.href= encodeURI(encodeURI(url));

}

第四: java web 下载文件名乱码问题

第一种:设置

response.setHeader(“Content-Disposition”, “attachment; filename=” + java.net.URLEncoder.encode(fileName, “UTF-8”));

这里将文件名编码成UTF-8的格式,就不会出现URL出错了。IE6下注意中文文字不能超过超过17个。

第二种:设置

response.setHeader( “Content-Disposition”, “attachment;filename=” + new String( fileName.getBytes(“gb2312”), “ISO8859-1” ) );

将中文名编码为ISO8859-1的方式。不过该编码只支持简体中文.

按照上诉方式,可以综合一下两种方式解决绝大部分中文问题。

fileName = URLEncoder.encode(fileNameSrc,”UTF-8″);

if(fileName.length()>150)//解决IE 6.0 bug {

fileName=new String(fileNameSrc.getBytes(“GBK”),”ISO-8859-1″);

response.setHeader( “Content-Disposition”, “attachment;filename=” + fileName);

}

第五:utf8解决JSP中文乱码问题

  • 一般说来在每个页面的开始处,加入:<%@ page language=”java” contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%><%request.setCharacterEncoding(“UTF-8”);%>

  • 以上就是java中文乱码的全部内容了,感谢大家的阅读!

文章来源:智云一二三科技

文章标题:Java编程中文乱码问题

文章地址:https://www.zhihuclub.com/187679.shtml

关于作者: 智云科技

热门文章

网站地图