java出现中文乱码 java运行出来汉字乱码
大家好,今天来为大家解答java出现中文乱码这个问题的一些问题点,包括java运行出来汉字乱码也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
如何解决Java项目中的中文乱码
一.设置工作空间的编码
1.编辑器的编码会影响到所有的项目中的字符的显示,可以说是作用最为广泛的设置,每一个项目都会受到这个设置的影响。点击菜单栏中的窗口(Window)——选项(Preferences)。
2.点击常规(General)——工作空间(Wordspace),然后在右侧的文本文件编码格式(Text file encoding)中选择你想要设置的编码格式,系统默认的格式为GBK。
二.设置项目的编码
1.如果其他的项目中不存在乱码问题,只是个别项目显示时出现乱码,那么我们不需要设置工作空间的编码,只需要修改项目的编码即可。
2.选中项目后,右键点击,在弹出的菜单中点击属性(Properties)。
3.在弹出的属性窗口中,选择资源(Resource)——点击选择Other(其他),然后选择你想要的编码格式。
三.设置单个文件的编码
1.只是个别文件出现了乱码,那么设置个别文件的编码格式就可以解决问题了。选中有乱码的文件,然后点击右键。
2.在弹出的菜单中选择属性(Properties)。
3.在弹出的属性窗口中选择资源,点击Other(其他)后设置个别文件的编码方式。
在java中怎样处理中文乱码的问题(有几种处理方式)
读取文件的时候如果是用的read方法(字节流),碰到中文输出就是乱码,然后存储的时候设置下编码为GBK或者是UTF-8形式即可,可以有效的解决乱码问题。
可以通过BufferedReader流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。
BufferedReader bre= null;
try{
String file="D:/test/test.txt";
bre= new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
while((str= bre.readLine())!= null)//判断最后一行不存在,为空结束循环
{
System.out.println(str);//原样输出读到的内容
};
备注:流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw= null;//定义一个流
pw= new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次write
pw.close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
javaweb怎么处理中文乱码
1.UTF-8国际编码,GBK中文编码。GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立;
2、web tomcat:默认是ISO8859-1,不支持中文的
3.java.nio.charset.Charset.defaultCharset()获得平台默认字符编码;
4.getBytes()是通过平台默认字符集进行编码;
二、引入
在学习任何一门技术时,经常会有初学者遇到中文乱码问题,比如MySQL,是因为在安装时没有设置;而在Servlet中,也会遇到中文乱码问题;
比如:
OutputStream out= response.getOutputStream();
out.write(String);
输出中文时可能会出现乱码;
比如:
[java]view plaincopy
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
OutputStreamout=response.getOutputStream();
Stringdata="博客";
out.write(data.getBytes("UTF-8"));
输出乱码的问题是程序用UTF-8编码,而浏览器默认用GBK解码了,因此会出现乱码;
三、Servlet相关的几种乱码
1、浏览器调用jsp,html等页面中文显示乱码
此情况需满足两个要求:
(1)文件本身是以utf-8编辑保存的(myEclipse中在properties中鼠标右键选择utf-8)
(2)浏览器用utf-8解析:
(手动)==>在浏览器中右键选择编码格式为utf-8
(智能)==>在文件中写入如:<meta name="content-type" content="text/html; charset=UTF-8">通过<meta>标签模拟response头,起到告诉浏览器用utf-8的编码解析
(智能)==>response.setContentType("text/html;charset=UTF-8");起到告诉浏览器用utf-8的编码解析
常用:
<meta name="content-type" content="text/html; charset=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/html;charset=utf-8");或者response.setHeader("content-type","text/html;charset=UTF-8");告诉浏览器用utf-8解析。(setHeader是HttpServletResponse的方法。如果想在拦截器Filter中设置字符编码,则无此方法,因为Filter的doFilter方法的参数类型是ServletResponse)
两句都填上,后来终于解决了这个问题;
其实我们应该思考一下本质:
response.setContentType("text/html;charset=UTF-8");目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");目的是用于response.getWriter()输出的字符流的乱码问题。如果是response.getOutputStream()是不需要此种解决方案的,因为这句话的意思是为了将response对象中的数据以UTF-8解码后的字节流发向浏览器
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!