Java编程中文乱码问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

给你Java学习路线:html-css-js-jq-javase-数据库-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

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

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

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

大致思路就是重新编码为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.URLDecoder.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="+你好;

}

后台java代码:

String expr = new String(

request.getParameter("expr").getBytes("ISO-8859-1"),"UTF-8");

方案二html页面:

function testTwo() {

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

}

小编推荐一个学Java的学习裙【 六五零,五五四,六零七 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

第四: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中文乱码问题

一般说来在每个页面的开始处,加入:

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

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210A0JZKE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券