其实对于这个乱码的问题,不能理解原理,解决问题乱码的问题都只能一个一个试。。。
本来是风和日丽的一天,我正复习着javaweb的转发这个小东西,结果我在转发过到的servlet中sout中文,在控制台却乱码了。。。
然后经过多方查找有如下几步,才解决了我的问题
产生乱码的代码
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(Charset.defaultCharset());
System.out.println("成功转发到TestServlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
这里控制台输出成功转发到TestServlet
的时候出现了乱码
先判断当前中文字符编码使用的是哪一种编码集
下面这段代码如果输出true,则表明中文字符串编码采用的就是GBK编码,如果为false就表明不是,自行更换charset这个变量中的假定编码格式
String charset ="GBK"; //假定编码格式
String str = "中文";
boolean flag = str.equals(new String(str.getBytes(),charset));
System.out.println(flag);
返回ture
说明编码的字符集就是GBK,然后我们只要将GBK编码转换为UTF-8编码就能解决中文乱码的问题了。
第一步
看第一个地方
这里必须都是UTF-8,这是我找答案过程中发现很多人都这么设置,但是我其实设置了这一步之后,控制台输出还是乱码
第二步
然后是这个地方输入-encoding utf-8
但是我设置了这个之后依旧还是控制台输出乱码
第三步
配置这里为-Dfle.encoding=UTF-8
然后成功解决乱码的问题
但是我细一想不对啊,这样的话,我岂不是每次都要配置tomcat里面的这个配置,这么繁琐。。。
然后我继续深扒度娘
这个事情的完美解决方案
那就是设置一个环境变量
变量名JAVA_TOOL_OPTIONS
变量值-Dfile.encoding=UTF-8
然后删除刚刚设置的tomcat中的内容,重启idea
成功解决乱码的问题。
说来惭愧,因为不明白这里面的每一步都是干什么的,有什么作用,所以只能一个一个试,如果后面学习清楚了每一步都是做什么的,一定回来补充。