Ⅰ 关于jsp被tomcat编译后的网页出现汉字乱码。
jsp乱码原因主要有两方面,java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
一、首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
重点介绍第二类乱码,即Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,例如从页面提交表单中提交的数据在Java程序里显示乱码等情况。
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法
对于流行的Tomcat来说,有以下两种解决方法:
1) 更改 D:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:
方法是找到 server.xml 中的
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
可以这样验证你的更改是否成功:在更改前,在你出现乱码的页面的IE浏览器,点击菜单“查看|编码”,会发现“西欧(ISO)”处于选中状态。而更改后,点击菜单“查看|编码”,会发现“简体中文(GB2312)”处于选中状态。
b)java程序要这么修改:
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
...
}
}
response.setContentType("text/html; charset=GBK");这句话的作用是让浏览器把Unicode字符转换为GBK字符。这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了。
Ⅱ java中tomcat启动时log4j中文乱码如何处理
是因为输出日志的编码和当前系统的编码不一样
Ⅲ java中中文出现乱码是怎么回事
你是用Eclipse开发的吗?是的话在首选项选择编码格式,一般都是GBK和UTF-8,切换就行了
Ⅳ Servlet + Tomcat 中文乱码的解决方法
乱码的本质原因是Servlet打出来的字符的编码与你浏览器自动选择的编码不一致,默认情况下用户的浏览器的编码是“自动选择”的。所以对于乱码的问题,首先要搞清楚servlet里面的string是用什么编码print给浏览器的,明确了这一点,就应该setContentType("text/html; charset=你的编码"),来告诉浏览器,如果是html,最好在meta里面指定,浏览器更优先看meta
Ⅳ 怎么配置java中tomcat的编码
在tomcat 的server.xml 中配置。
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"/>
Ⅵ java web运行在tomcat服务器上,提交给服务器的汉字乱码,怎么解决
web中部署,使用 filter去做转换成utf-8就容易得多了
~
~
~~~~~~~~~~~~~
Ⅶ javaweb怎么处理中文乱码问题
中文乱码问题真的是一个很棘手的问题,特别是从前台传到后台之后,都不知道问题出在哪里了。现在分享解决javaWEB中前后台中文乱码问题的3种方法。
方法一:
tomcat的自带编码是ISO-8859-1的格式,是不兼容中文的编码的。所以我们从后台接收的时候要注意。
采用相同的格式去接收(ISO-8859-1),然后用能解析的编码(utf-8)去转换。这样我们就能得到能兼容中文的格式了。这样处理之后发往前台。注意:发往前台的时候也需要设置一下
resp.setContentType("text/html;charset=utf-8");//设置页面的字符编码,解决界面显示中文乱码的问题
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//因为tomcat自带编码是ISO-8859-1格式
//解决乱码方法之一
<span style="white-space:pre"> </span>String name=req.getParameter("username");
<span style="white-space:pre"> </span>String pwd=req.getParameter("pwd");
<span style="white-space:pre"> </span>byte[] b=name.getBytes("ISO-8859-1");//用tomcat的格式(iso-8859-1)方式去读。
<span style="white-space:pre"> </span>String str=new String(b,"utf-8");//采用utf-8去接string
<span style="white-space:pre"> </span>resp.setContentType("text/html;charset=utf-8");//设置页面的字符编码<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>PrintWriter pw =resp.getWriter();
<span style="white-space:pre"> </span>String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
<span style="white-space:pre"> </span>pw.print(str1);
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);
方法二:
由于方法一比较繁琐,采用用了简单的设置。只需要简单的一句就可以搞定
req.setCharacterEncoding("utf-8");//必须写在第一位,因为采用这种方式去读取数据,否则数据会出错。
这样就不用像之前的那样繁琐的设置了
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//因为tomcat自带编码是ISO-8859-1格式
//解决乱码二《法一比较繁琐》
req.setCharacterEncoding("utf-8");//必须写在第一位,因为采用这种方式去读取数据,否
则数据会出错。
//设置这样方式去读。这样中文就能够读取出来了,但是需要注意。表单的发送方式必须是<span style="color:#ff0000;"> method='post'</span>
resp.setContentType("text/html;charset=utf-8");//设置传过去的页面显示的编码
String name=req.getParameter("username");
String pwd=req.getParameter("pwd");
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);
方法三:
这是在法二的基础上修改的。虽然我们能修改编码格式去读,但是考虑到用户肯定不会修改,所以我们需要采用比较通用的办法,让用户修改配置文件。也就是web.xml文件
需要修改web.xml里面的内容,就是说,字符编码从xml接收过来。需要在xml文件中配置参数。
代码如下:
<servlet>
<servlet-name>Encodeing</servlet-name>
<servlet-class>cn.hncu.com.encode.Encodeing</servlet-class>
<init-param>
<param-name>charset</param-name>
<param-value>utf-8</param-value>//这里面的内容可供用户自己填写(必须是编码格式)
</init-param>
</servlet>
我们知道前台和后台进行交换必须经过web.xml配置
我们需要获取web.xml的设置的参数
public void init(ServletConfig config) throws ServletException {
charset=config.getInitParameter("charset");//获得初始化参数。当然charset需要设置为全局变量。后面的service函数需要设置req.setCharacterEncoding(charset);
}
req.setCharacterEncoding(charset);
resp.setContentType("text/html;charset=utf-8");
String name=req.getParameter("username");
String pwd=req.getParameter("pwd");
PrintWriter pw =resp.getWriter();
String str1="<html><body><font size='5px' color='red'>username:"+name+"pwd:"+pwd+"</font></body></html>";
pw.print(str1);
Ⅷ 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 plain
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解码后的字节流发向浏览器
Ⅸ 如何解决Tomcat下中文乱码问题
对于流行的Tomcat来说,有以下两种解决方法:
1) 更改 D:\Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:
方法是找到 server.xml 中的
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />
标记,粗体字是我添加的。
可以这样验证你的更改是否成功:在更改前,在你出现乱码的页面的IE浏览器,点击菜单“查看|编码”,会发现“西欧(ISO)”处于选中状态。而更改后,点击菜单“查看|编码”,会发现“简体中文(GB2312)”处于选中状态。
b)更该 Java 程序,我的程序是这样的:
public class ThreeParams extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=GBK");
...
}
}
粗体字是必需要有的,它的作用是让浏览器把Unicode字符转换为GBK字符。这样页面的内容和浏览器的显示模式都设成了GBK,就不会乱码了。
Ⅹ 关于javaweb项目在linux下tomcat乱码
1.如果你的是Tomcat服务器,在Linux服务器上找到你的Tomcat服务器下的bin目录中的Catalina.sh文件,编辑它,在里面的JAVA_OPTS变量中添加“-Dfile.encoding=GBK -Dsun.jnu.encoding=GBK”,记住,一定是GBK的
2.如果是Jboss服务器,那么也是在bin目录下,但是是修改run.conf文件,也是在JAVA_OPTS变量中添加“-Dfile.encoding=GBK -Dsun.jnu.encoding=GBK”。
修改好后,保存,重启服务器,搞定。望采纳,谢谢。