java出现乱码的原因是
.java 文件中的编码格式和命令提示符的指令不一致导致的
比如.java 使用的是utf-8,windows环境下命令提示符编码是gbk,在使用javac 命令进行对.java文件进行编译的时候,.java文件中的中文字符就会出现 乱码.
出现这样的情况,处理方式是通过现在编译编码-encoding 处理
javac -encoding utf-8 Test.java1、浏览器调用jsp,html等页面中文显示乱码此情况需满足两个要求:
(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
(2)浏览器用utf-8解析:
(手动)==>在浏览器中右键选择编码格式为utf-8
(智能)==>在文件中写入如: <meta name="content-type" content="text/htmlcharset=UTF-8"> 通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)==>response.setContentType("text/htmlcharset=UTF-8")起到告诉浏览器用utf-8的编码解析
常用:
<meta name="content-type" content="text/htmlcharset=UTF-8">或<meta charset="utf-8">
<%@ pageEncoding="utf-8"%>
<?xml encoding="UTF-8"?>
2、通过浏览器调用servlet,页面显示乱码。
Servlet乱码分为request乱码和response乱码;
(1)response乱码问题
解决方法:
在网上很有效的解决方法是添加:
response.setCharacterEncoding("UTF-8")
解决不了,后来又搜到一条解决方法是:
response.setContentType("text/htmlcharset=utf-8")或者 response.setHeader("content-type","text/htmlcharset=UTF-8")告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)
两句都填上,后来终于解决了这个问题;
其实我们应该思考一下本质:
response.setContentType("text/htmlcharset=UTF-8")目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8")目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器;
运行java带有中文的代码就出现乱码,解决方式如下:
设置整个java工程的编码格式为utf-8,如下图:
设置html的编码格式为utf-8