IEDA+Tomcat+ajax中文乱码问题
对自学编程的人而言,乱码问题往往很耽误时间并让人烦躁,下面给大家分享一次IDEA+Tomcat+ajax乱码问题解决的全过程
先列代码:
前台,非常简单的原生ajax POST请求:
let btn1=document.getElementById('btn1');
let div1=document.getElementById('div1');
btn1.onclick=function(){
let xhr=new XMLHttpRequest();
let obj={
"测试":2,
"num2":3
};
let data=JSON.stringify(obj);
let url="http://localhost:8080/ajax";
xhr.open("post",url,true);
xhr.setRequestHeader("Content-Type","application/json;charset=utf-8");
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200 || xhr.status==304){
console.log(xhr.responseText);
let result=JSON.parse(xhr.responseText);
console.log(result);
}
}
}
xhr.send(data);
}
后台:一个简单的servlet(如果用框架(像spring),编码格式的设置应该有特定的配置文件)
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
res.setContentType("text/json;charset=utf-8");
res.setCharacterEncoding("utf-8");
StringBuffer sb=new StringBuffer();
InputStream is=req.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String s="";
while ((s=br.readLine())!=null){
sb.append(s);
}
String result=sb.toString();
System.out.println(result);
res.getWriter().write(result);
}
然后、问题就来了,如果大家看代码,发现前后台已经都是utf-8了,但是,IDEA的控制台和浏览器里console里打印出来的result都是乱码。然后,作为一个新手吗,我就懵逼了,于是、就开启了搜索引擎之旅。
第一步:修改IDEA里的文件编码方式:
在File-Settings-Editor-File Encodings里,如下图:
,把右边能设置的全部设置为utf-8,保存,重启Tomcat,重新运行项目,然而,并没有用,IDEA的控制台和浏览器的console里依然都是乱码。苦思冥想了几分钟之后,我梳理了一下思路,浏览器的请求发送之后是到Tomcat的,然后由Tomcat处理之后再返回响应,现在浏览器里的乱码应该是Tomcat处理之后返回的的,而IDEA的控制台里的乱码,应该是IDEA自己的设置问题。
第二部:修改Tomcat启动时的编码
在Edit Configurations里,如下图:
在VM options里填入:
-Dfile.encoding=UTF-8
保存设置,然后重启Tomcat服务,这时候浏览器里的乱码问题已经没有了。
第三部:设置IDEA的内部编码问题
编辑器的控制台输出的内容肯定是是编辑器内部的文件中的内容,在IDEA的安装目录里,在bin目录找到 idea64.exe.vmoptions 这个文件(如果是32位系统,应该是idea.exe.vmoptions),在这个文件里同样加入:
-Dfile.encoding=UTF-8
然后重启IDEA,运行项目,乱码全部消失!!!