struts中文乱码
中文乱码解决大全
SSH开发过程中的中文问题汇总作者:Rainisic来源:博客园发布时间:2012-01-11 14:26 阅读:50 次原文链接[收藏]在使用SSH开发的过程中,我们经常会因为各种各样的中文乱码问题而苦恼。
之前开发的过程中遇到过一些,但是都没有记录下来,这次,我就遇到的中文问题进行一个汇总,希望能够对大家有所帮助。
1. 平台环境参数操作系统:Windows 7 旗舰版64位JDK版本:JDK 1.6 / JDK 1.7 (此处由于JDK 7 发布不久,所以对两个版本进行测试)开发环境:Eclipse Java EE Indigo网站容器:Tomcat 7.0开发框架:Struts 2.3.1.1-GASpring 3.1.0-releaseHibernate 4.0.0-Final / Hibernate 3.6.9-Final (此处由于Hibernate 4 final 刚刚发布不久,所以对两个版本进行测试)2. 中文问题汇总(1)HTML中未指定文件编码问题描述:在HTML中未指定文件编码,在部分浏览器中将会出现中文乱码。
解决方案:在HTML的head标签中指定文档编码,代码如下(请根据DOCTYPE选择):// HTML 4.01 Transitional<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">// HTML 5<meta charset="UTF-8">(2)表单提交使用GET方法问题描述:在HTML form 中提交表单的时候使用method="get"导致中文乱码。
解决方案:form表单的method设置为post,代码如下:<form action="test" method="post"><input type="submit"/></form>(3)JSP文件中未指定文档编码类型问题描述:在JSP文件中未指定JSP文档编码,在浏览器中会出现中文乱码。
乱码处理方法
1.在form中提交参数出现乱码解决方法:在struts.xml中配置<constant name="struts.i18n.encoding"value="GBK"></constant>这是个配置文件常量配置,但是有的配置了还是乱码,那就是因为你的struts2.1.7一下的版本的事,这个配置在2.1.7以上的才有效。
2.在用url传值时出现乱码解决方法:在服务容器内修改配置,我用的是tomcat服务器,修改server.xml的配置<Connector port="808" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URIEncoding="GBK" />就这两种常见的乱码问题,后一种的解决方法有些欠妥,因为这样解决依赖了服务容器,离开容器还要就会失效,在网上有这样的解决方法,就是在web.xml配置文件中配置过滤get传的参数,但是很多过滤器只是针对post 的,还没有见过过滤get的配置方法,在这里希望大家一起努力彻底解决ssh 传值乱码的问题。
在spring.jar包的org.springframework.web.filter包下有个CharacterEncodingFilter.java 把spring.jar放进工程的lib里,然后在web.xml文件中<servlet>元素前加以下代码:<filter><filter-name>Spring character encoding filter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param><param-name>encoding</param-name><param-value>GBK</param-value></init-param></filter><filter-mapping><filter-name>Spring character encoding filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>不用对页面有任何改动就可实现正确显示中文!1.设置服务器的URIEncoding="utf-8"(server.xml);2.设置mysql中my.ini中两个编码为utf83.新建struts.properties,写上struts.i18n.encoding=UTF-84.设置连接mysql的url为: jdbc:mysql://localhost。
jsp页面传值中文乱码 网页乱码 jsp过滤器过滤乱码等乱码处理办法
一、jsp页面间传值中文乱码问题解决办法<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <form action="b.jsp">name:<input type=text name=name><input type=submit></form>b.jsp页面内容:<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <%String name=request.getParameter("name");%><body><%=name%></body>现象:中文乱码,比如“??????”解决方法如下:方法一:1. 在b.jsp中把pageEncoding="GB2312"改为pageEncoding="ISO885Array-1"虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“??????”的乱码,而是一些特殊字符2. 然后在浏览器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。
3. 但是这种方法是不可行的。
方法二:( 已经验证可行)1. 在b.jsp中把String name=request.getParameter("name");修改为String name=new String(request.getParameter("name").getBytes("ISO-885 Array-1"),"GB2312");2. 这时再在页面上显示,则就是中文了。
中文参数乱码问题解决方案(精选5篇)
中文参数乱码问题解决方案(精选5篇)第一篇:中文参数乱码问题解决方案问题1:在使用tomcat服务器时,如在跳转路径中传递中文参数会出现乱码现向!如:以和两种方式提交的变量flag在LoginServlet中用request.getParameter(“flag”);时就会出现乱码问题。
解决:在tomcat/conf/servlet.Xml中加入一段代码:debug=“0” connectionTimeout=“20000”disableUploadTimeout=“true” URIEncoding=“true”/>问题2:如果uri中转递的是参数要发送到jsp页面,则必须在接受代码的jsp页面里面还要加入代码:问题3:在jsp页面里的代码修正://如不注明是post方式则默认是get方式问题4:在servlet中的代码修正在doPost方法里面最上面的位置加上如下代码:response.setCharacterEncoding(“gb2312”);request.setCharacterEncoding(“gb2312”);第二篇:struts2 action接收到的参数中文乱码的问题struts2 action接收到的参数中文乱码的问题(2011-06-16 10:55:44)转载标签:分类:技术收藏utf-8 乱码 gb2312 字符集编码方法杂谈中文乱码,首先要区分是页面乱码、action乱码,还是数据库乱码。
大致的原理是java使用unicode编码-->window使用gbk(gb2312的扩展集)--mysql默认使用utf-8(unicode的一种编码方法),这样转来转去就乱码了^_^。
解决方法如下:1.在struts2里面,最好将所有字符都设成utf-8。
1.1 在jsp页面设定字符编码。
这边有必有说明的是如果是jsp+java bean+servlet 的方案,中文乱码很好解决,统一设成gb2312就可以了。
中文乱码-页面乱码PPT课件
</action-mappings>
2021/6/7
7
2021/6/7
8
运行 测试界面输入中文
2021/6/7
9
解决步骤一:修改server.xml
2021/6/7
10
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
创建一个类CharacterEncodingFilter
2021/6/7
12
2021/6/7
13
2021/6/7
14
配置servlet
2021/6/7
15
2021/6/7
16
2021/6/7
17
国际化乱码
2021/6/7
18
修改登录页面
2021/6/7
19
修改资源文件
2021/21/6/7
27
上一步覆盖完毕之后,重启编辑器
2021/6/7
28
部分资料从网络收集整 理而来,供大家参考,
感谢您的关注!
1
页面乱码案例
2021/6/7
2
创建一个struts项目,FCode项目
打开index.jsp文件
2021/6/7
3
对上一个页面进行保存
即出现下图界面,提示编码无法解析部分 字符
2021/6/7
4
修改代码如下
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
如何解决乱码问题总结
</filter-mapping>
3.URL中的中文问题
对于直接通过在URL中传递中文参数,如“http://localhost/a.jsp?str=中文”这样的get请求,在服务端用request.getParameter("name")时返回的往往是乱码。按以上的做法设置Filter没有用,用request.setCharacterEncoding("gbk")的方式,仍然不管用。
httpServletResponse.setContentType("text/html;charset=gbk")),最好同时在JSP页面的head部分加上<meta http-equiv="Content-Type" content="text/html;charset=gbk">
·在每次要输出中文的地方主动转换编码方式,比如要在页面中输入“中文”二字,就可以用以下方式:
<%
String str="中文";
byte[] tmpbyte=str.getBtyes("ISO-8859-1");
str=new String(tmpbyte);
out.print(str);
%>
2.获取表单提交的数据时的中文乱码问题
%>
<html>
<head>
<title>中文Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=gbk">
struts2传值出现乱码问题
1、在struts.xml文件中添加:<constant name="struts.i18n.encoding" value="gb2312" />页面编码格式如果是gb2312那么value值就写gb2312,页面编码如果是GBK那么value值就写GBK;总之页面什么编码格式这里的value就写什么格式。
这样简单语句话就解决了乱码问题如下:<struts><constant name="struts.i18n.encoding" value="gb2312" /><package name="com" extends="convention-default">............</struts>2、url传值到Action的乱码解决方法jsp页面 URL传中文参数到Action里面出现乱码,用过滤器和控制器都解决不了,用了我两个多小时解决这个小问题!解决方法有以下几种:第一种:在Action中用 new String(str.getBytes("ISO8859_1"), "UTF8"),进行转码,因为传递的时候,中文默人的是ISO8859_1第二种:可通过配置TOMCAT来解决此问题,具体解决方法如下:在tomcat的server.xml里,找到<Connector port="8080"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443"acceptCount="100"debug="0" connectionTimeout="20000"disableUploadTimeout="true"useBodyEncodingForURI="true" URIEncoding="gbk">其中是修改 disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="gbk" 其方法是防止在url中出现乱码然后在每个Jsp页面添加如下代码<%@ page pageEncoding=”gb2312″%><%@ page contentType=”text/html;charset=gb2312″%><%request.setCharacterEncoding(”gb2312″);%>第三种:直接在ACTION中利用以下方法解决:request.setCharacterEncoding("gb2312");response.setCharacterEncoding("gb2312");我用的是struct1.2+Hibernate3.0+Spring2.0在做那个两个action的页面的时候,jsp页面的下拉列表通过actionForm传值给action,老是得到乱码,过滤器+server.xml+页面编码统一后,仍不能解决。
JSP中文乱码处理
然后我们在info.jsp中来调这个函数,具体代码如下: <%@ page contentType="text/html; charset=GBK" %> <%@ include file="tocn.jsp" %> <h3>测试中文信息</h3> 传递的中文信息: <% String test = tocn(request.getParameter("test")); out.println(test); %>
接下来再次测试程序,发现问题得到了解决,中文信息正 确显示出来了。如图所示:
注意:这种解决方式只对POST提交方式有效,如果客户 端是以GET方式或者URL重写的方式提交的中文信息,可 能它就无用武之地了。
参数传递乱码问题
在Web应用中,客户端提交请求信息时,在某些情况下需要用到GET 提交方式。 有时,在以URL重写方式传递信息时,也会传递中文信息。 这两种方式如果用方案二是无法解决中文乱码问题的。我们先来看一 个测试,还是需要两个JSP页面。如下: refer.jsp <%@ page contentType="text/html; charset=GBK" %> <form action="info.jsp" method="GET"> 输入中文进行测试<br> <input type="text" name="test"/> <input type="submit" value="ok"/> </form> <a href='info.jsp?test=我爱我家'>下一页</a>
JSP中文乱码问题解决办法
JSP中文乱码问题解决办法当用request对象获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字字符的信息必须进行特殊处理。
常见的几种字符集编码:⏹ASCII码:不支持中文⏹ISO-8859-1:不支持中文⏹GB2313、GBK:支持中文⏹Unicode:支持中文⏹UTF-8:支持中文在解决JSP中文乱码问题前,弄清以下几点:(1) windows平台采用的默认字符集编码是:GBK(2) IE浏览器默认采用UTF-8字符集编码方式发送Http请求。
(3) Tomcat在处理Get请求时,永远采用ISO-8859-1编码;Tomcat在处理Post请求时,默认采用ISO-8859-1编码;如果进行了如下设置request.setCharacterEncoding(“GBK”),则采用GBK编码。
可以使用如下几种方式解决JSP中文乱码问题。
1、方法一:调用自定义的转换函数<%@page contentType="text/html;charset=GB2312"%><%!public String getStr(String s) {String str = s;try {byte[] b = str.getBytes("ISO-8859-1");str = new String(b);return str;} catch (Exception e) {return str;}}%>使用内置对象request将获取的数据,使用ISO-8859-1进行重新编码,并保存到一个字节数组中,然后调用new String()方法,以GBK方式将这个字节数组构造出一个新的字符串,这个新的字符串就是我们想要的结果。
适用于以下三种情况:(1) 以Get方式提交表单,提交的数据中包含汉字字符。
(2) 以Post方式提交表单,提交的数据中包含汉字字符。
中文乱码解决方案
IE6的“以UTF-8发送URL”选项设置对请求页面字符编码有影响吗?关键字: 字符编码最近又碰到了中文乱码问题,这里我没有把数据库牵扯进来,先说下我的环境,servlet容器使用Tomcat6.0,浏览器FireFox3.0、IE6,涉及字符编码设置的地方我的思路就是编码的地方都统一使用UTF-8,具体配置如下:1.所有页面的charset设置为UTF-8。
2.Tomcat的URIEncoding默认是ISO-8859-1,而我设置为UTF-8,主要是想解决中文命名的文件以及请求以get方式提交有可能出现的乱码问题。
3.添加过滤器,调用request.setCharacterEncoding("utf-8")方法将request 的字符集设定为utf-8,解决请求以post方式提交的乱码问题。
其实这样的设置貌似是不会再出现乱码问题了,不过,问题依旧来了,如果我在浏览器的地址栏中输入中文参数提交,返回的页面却出现了乱码。
真搞不明白到底是哪里出了问题!说起来对中文乱码的问题一直是一支半解,出现乱码了,网上搜罗了一大堆资料,按照网上的配置,问题到是解决了,不过原理却搞的很模糊,一个请求发送到服务器,服务器业务逻辑处理后返回一个页面,这中间涉及的字符集转换,编码,解码过程一概不清楚。
这次,折腾了半天,总算是更进一步了解了字符编码问题,这里做个总结。
先看我的总结,有不对的地方欢迎批评。
首先我们看下,一个请求响应的流程浏览器 IE/FireFox -------->Servlet容器----------------->显示页面编码使用容器的URIEncoding转码解码我把用户发送请求方式不同引起的中文问题划分了四种类型:1、表单的get提交2、表单的post提交3、页面链接传递中文参数4、地址栏中参数直接输入中文提交1.首先我们看表单get方式提交浏览器根据页面的charset编码方式对页面进行编码,然后提交至服务器,首先进入对应的字符编码过滤器(如果有的话),不过Tomcat6.0对于get 提交方式采用的是server.xml文件中的URIEncoding编码方式,而并不会采用过滤器中设置的编码,那么根据我的环境设置,jsp页面都使用UTF-8的编码,Servlet容器的URIEncoding也设置为UTF-8,则servlet不用进行转码即可正确解码,获得正常的中文字符串。
Struts应用程序中文显示方案及其国际化技术
次划分 , 也提供 了一 系列有 效 的技 术来 简化 We 应用 的开 发 。文 中针对 Srt应用 程序开 发 中 出现 的中文 显 示 问题 同时 b t s u
进行 了探讨 , 出了相 应的解 决方案 , 提 并对 Srt应 用 程序 的国际 化 问题做 出了技 术研究 。 t s u
I e na i n lz to c o o y ntr to a ia i n Te hn lg
M A n, UANG e p i Li H W n— e
(  ̄ot f nomao c ne& T cn l y Suh sJat gUnvri , h nd 10 1C ia S ho o fr tnSi c I i e ehoo ,otwet i o ie t C eg u6 0 3 , hn) g on sy
Srt 用 程序 中文 显 示 方 案及 其 国 际化 技 术 t s应 u
马 林 , 文培 黄
( 南交通 大学 信 息科 学 与技 术 学 院 , 川 成 都 60 3 ) 西 四 10 1
摘 要 :t t是近 年来 构建基 于 Jv 的 We 应 用程序 的主 流框架 。它所 实现 的 MV Sr s u aa b C模式 , We 应 用带 来 了良好 的层 给 b
a piain,fee ei frs le t. d itra in l ai t n lg fS r t p I a p l to o r asre o eov n An nen t ai to  ̄h oo yo t s a pi t c d s s o z n u c
Ke rs: tus Chn s ipa ; VC;ne a in l to ywo d S r t; ieeds ly M itr t ai in n o a z
Struts和Hibernate测试题
1一下关于struts的描述中,不正确的是()A.struts 是一个基于JAVA EE的MVCB.struts2的框架配置文件是struts-configxmlC.struts2的控制组建核心包括核心控制和业务控制器D.在struts中解决中文乱码可以通过修改struts。
I18n。
encoding的值为GBK来实现2.不属于Struts2的动作类的常量返回值的是()A.success B.Input C.Never D.login3.一下不属于Struts2动作执行的结果类型是()a.Action b.Redirect c.RedirectAction d.dispatcher4.在struts.xml中。
假如在一个package中没有配置namespace,那么在其中配置一个Action 名字叫做login,它的result是这样配置的<result>/login.jsp</result>,已知在此配置文件中还有另一个name为user的package其中也有一个Action名字为login,它的result是这样配置的<result>/loginUser.jsp</result>那么在以下什么情况下将能访问到login.jspA.在根路径后输入/loginB.在根路径后输入/user/loginC.在根路径后输入/login/userD.在根路径后输入/abc/login5.正规开发中,在使用struts2时定义Action使用哪种方式。
A.直接定义Action类。
B.从ActionSupport继承。
C.从Action继承。
D.实现Action接口。
6.不同的线程在调用Action时创建几个Action实例。
A.1个B.2个C.每个线程创建1个。
D.可以自定义配置。
7.struts2的体系结构主要包括那几个部分()A.模型层B.struts控制器组件C。
解决中文乱码的问题
protected boolean ignore = true; //在web.xml文件里定义filter时要用到此参数
public void destroy() {
// TODO Auto-generated method stub
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
this.ignore = true;
else
this.ignore = false;
}
protected String selectEncoding(ServletRequest request) {
String encoding = selectEncoding(request);
if (encoding != null)
JSP出现中文乱码问题解决方法详解
JSP出现中⽂乱码问题解决⽅法详解在介绍⽅法之前我们⾸先应该清楚具体的问题有哪些,笔者在本博客当中论述的JSP中⽂乱码问题有如下⼏个⽅⾯:页⾯乱码、参数乱码、表单乱码、源⽂件乱码。
下⾯来逐⼀解决其中的乱码问题。
⼀、JSP页⾯中⽂乱码在JSP页⾯中,中⽂显⽰乱码有两种情况:⼀种是HTML中的中⽂乱码,另⼀种是在JSP中动态输出的中⽂乱码。
先看⼀个JSP程序:<%@ page language="java" import="java.util.*" %><html><head><title>中⽂显⽰⽰例</title></head><body>这是⼀个中⽂显⽰⽰例:<%String str = "中⽂";out.print(str);%></body></html>上⾯这个JSP程序看起来好像是在页⾯显⽰⼏句中⽂⽽且标题也是中⽂。
运⾏后在浏览器中显⽰如图所⽰原因在于没有在JSP中指定页⾯显⽰的编码,消除乱码的解决⽅案很简单上⾯代码中page命令修改成如下所⽰即可<%@ page language="java" import="java.util.*" contentType="text/html; charset=GB2312" %><html><head><title>中⽂显⽰⽰例</title></head><body>这是⼀个中⽂显⽰⽰例:<%String str = "中⽂";out.print(str);%></body></html>再次运⾏乱码消失,原理就是向页⾯指定编码为GB2312,那么页⾯就会按照此编码来显⽰,于是乱码消失。
中文乱码问题解决方法
在Jsp文件问题时,中文乱码现象经常遇到,现将处理方法总结一下,供大家参考:(在各种编码方案中,UTF-8、GBK、GB2312都是支持中文显示的。
只是GBK比GB2312支持跟多的字符)一、JSP页面显示乱码Jsp文件页面显示乱码,这种情况比较好处理,在页面的Page指令加上如下一项就OK了:<%@ page contentType="text/html; charset=gb2312"%>注:如果是HTML页面显示乱码,则加上:<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 二、URL传递参数中文乱码当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法一如下:在参数传递时对参数编码,比如RearshRes.jsp?keywords=" + .URLEncoder.encode(keywords) 然后在接收参数页面使用如下语句接收keywords=newString(request.getParameter("keywords").getBytes("ISO-8859-1"),"UTF-8") ;解决方法二:修改tomcat的server.xml文件中URIEncoding。
<Connectordebug="0"acceptCount="100"connectionTimeout="20000"disableUploadTimeout="true"port="80"redirectPort="8443"enableLookups="false"minSpareThreads="25"maxSpareThreads="75"maxThreads="150"maxPostSize="0"URIEncoding="GBK"></Connector>这个方法主要针对从url中获取字符串的问题。
JSP中文乱码的产生原因及解决方案
JSP中文乱码的产生原因及解决方案在JSP的开发过程中,经常出现中文乱码的问题,可能一直困扰着大家,现在把JSP 开发中遇到的中文乱码的问题及解决办法写出来供大家参考。
首先需要了解一下Java中文问题的由来:Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。
原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。
基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312或-ecoding UTF-8编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
下面是一些常见中文乱码问题的解决方法(下面例子中ecoding采用的是gb2312,也可设为ecoding GBK或ecoding UTF-8):一、JSP页面乱码这种乱码问题比较简单,一般是页面编码不一致导致的乱码,一般新手容易出现这样的问题,具体分以下两种情况:➢未指定使用字符集编码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html charset=gb2312"> </head><body><%out.print("JSP的中文处理");%></body>这种乱码的原因是没有在页面里指定使用的字符集编码,JSP页面中出现了中文字符,而默认的ISO-8859-1字符集中无中文字符,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,在JSP页面中指定编码方式(gb2312),和浏览器解码方式设置相同,即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。
不同浏览器上中文文件名的下载乱码问题
不同浏览器上中文文件名的下载乱码问题2011-09-09 16:43浏览器能正确识别的编码格式,只要按照这样的编码来设置对应的Content-Disposition,那么应该就不会出现中文文件名的乱码问题了。
首先,Content-Disposition值可以有以下几种编码格式1. 直接urlencode:Content-Disposition: attachment; filename="struts2.0%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B.chm"2. Base64编码:Content-Disposition: attachment; filename="=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?="3. RFC2231规定的标准:Content-Disposition: attachment; filename*=UTF-8''%E5%9B%9E%E6%89%A7.msg4. 直接ISO编码的文件名:Content-Disposition: attachment;filename="测试.txt"然后,各浏览器支持的对应编码格式为:1. IE浏览器,采用URLEncoder编码2. Opera浏览器,采用filename*方式3. Safari浏览器,采用ISO编码的中文输出4. Chrome浏览器,采用Base64编码或ISO编码的中文输出5. FireFox浏览器,采用Base64或filename*或ISO编码的中文输出new_filename = URLEncoder.encode(filename, "UTF8");// 如果没有UA,则默认使用IE的方式进行编码,因为毕竟IE还是占多数的rtn = "filename=\"" + new_filename + "\"";if (userAgent != null){userAgent = userAgent.toLowerCase();// IE浏览器,只能采用URLEncoder编码if (userAgent.indexOf("msie") != -1){rtn = "filename=\"" + new_filename + "\"";}// Opera浏览器只能采用filename*else if (userAgent.indexOf("opera") != -1){rtn = "filename*=UTF-8''" + new_filename;}// Safari浏览器,只能采用ISO编码的中文输出else if (userAgent.indexOf("safari") != -1 ){rtn = "filename=\"" + new String(filename.getBytes("UTF-8"),"ISO8859-1") + "\"";}// Chrome浏览器,只能采用MimeUtility编码或ISO编码的中文输出else if (userAgent.indexOf("applewebkit") != -1 ){new_filename = MimeUtility.encodeText(filename, "UTF8", "B");rtn = "filename=\"" + new_filename + "\"";}// FireFox浏览器,可以使用MimeUtility或filename*或ISO编码的中文输出else if (userAgent.indexOf("mozilla") != -1){rtn = "filename*=UTF-8''" + new_filename;}}目前,我测试的情况,在几个浏览器上都能正常输入中文文件名但,也许浏览器不同版本,可能还会有乱码的情况...../laxinicer/blog/item/f755d82e538a70474ec22634.html。
struts2.2.1文件下载及中文乱码问题解决
Struts2下载文件实现的说明contentType内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片inputName下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为inputStream的属性需要编写getInputStream()方法contentDisposition文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
取值为:attachment;filename="struts2.txt",表示文件下载的时候保存的名字应为struts2.txt。
如果直接写filename="struts2.txt",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline;filename="struts2.txt"bufferSize下载缓冲区的大小contentType属性和contentDisposition分别对应着HTTP响应中的头Content-Type和Content-disposition头。
如下例:down.jsp<a href="<s:url value='test/fileDown.do?fileName=struts2配置参数详解.txt'> </s:url>">下载</a>struts.xml配置:<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="com" namespace="/test" extends="struts-default"><action name="fileDown" class=".down.FileDown"><result type="stream"><!-- 下载文件类型定义--><param name="contentType">application/octet-stream</param><!-- 下载文件输出流定义--><param name="inputName">inputStream</param><!-- 下载文件处理方法--><param name="contentDisposition">attachment;filename="${fileName}"</param><!-- 下载文件的缓冲大小--><param name="bufferSize">4096</param></result></action></package></struts>文件下载Action:public class FileDown extends ActionSupport {private String fileName;public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public InputStream getInputStream() throws UnsupportedEncodingException {return ServletActionContext.getServletContext().getResourceAsStream( "/WEB-INF/" + fileName);}public String execute(){System.out.println(fileName+"----------");return "success";}}这个例子运行可,可能会出现:下载页面的文件名为:fileDown.do或htm等情况。
Tomcat中文乱码解决方法
Tomcat 中文乱码解决方法一、通过contentType、pageEncoding或response.setCharacterEncoding设置网页编码(如utf-8、gb2312、gbk或其它编码)。
比如(以gbk为例):<%@ page contentType="text/html;charset=gbk" %>或: <%@ page pageEncoding="gbk" %>或: <% response.setCharacterEncoding ("gbk"); %>二、然后根据以下情况进行具体设置(以下各情况的设置互不关联):◆POST数据的接收只需在接收数据的jsp文件中设置request的字符编码格式为当前POST数据的网页编码,例如:<% request.setCharacterEncoding("gbk"); %>◆GET数据和URL数据(如超链接)的接收只需在Tomcat配置文件server.xml的Connector标签中设置useBodyEncodingForURI为true,或者设置URIEncoding为提交数据的网页编码。
例如:<Connector port="8080" maxHttpHeaderSize="8192"maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100"connectionTimeout="20000" disableUploadTimeout="true"useBodyEncodingForURI="true" 或URIEncoding="gbk" />如果采用useBodyEncodingForURI="true",则需要在接收数据的jsp文件中设置request的字符编码格式为当前网页编码,例如(设当前网页编码为gbk):<% request.setCharacterEncoding("gbk"); %>※URIEncoding参数会影响到所有应用,故推荐设置useBodyEncodingForURI为true的方式接收数据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将Java/J2EE系统的统一编码定义为UTF-8。UTF-8编码是一种兼容所有语言的编码方式,惟一比较麻烦的就是要找到应用系统的所有出入口,然后使用UTF-8去“结扎”它。
一个J2EE应用系统需要做下列几步工作:
开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。 Байду номын сангаас
在Jsp的html代码中,声明UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
开发和编译代码时指定字符集为ISO8859_1。
运行操作系统的默认编码必须是ISO8859_1,如Linux。
在JSP头部声明:<%@ page contentType="text/html;charset=ISO8859_1" %>。
(2)如果统一指定为GBK中文字符集,上述3个环节同样需要做到,不同的是只能运行在默认编码为GBK的操作系统,如中文Windows。
网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter
需要配置web.xml 激活该Filter。
在JSP头部声明:<%@ page contentType="text/html;charset= UTF-8" %>。
Re: 请问struts中文乱码问题一般如何解决?
提交时间: Sep 13, 2005 10:55:04 PM 回复 发消息
/idea/chinesejava.htm
Java/J2EE中文问题终极解决之道
Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之道。
使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:
request.setCharacterEncoding("UTF-8")。
J2EE应用程序是运行在J2EE容器中。在这个系统中,输入途径有很多种:一种是通过页面表单打包成请求(request)发往服务器的;第二种是通过数据库读入;还有第3种输入比较复杂,JSP在第一次运行时总是被编译成Servlet,JSP中常常包含中文字符,那么编译使用javac时,Java将根据默认的操作系统编码作为初始编码。除非特别指定,如在Jbuilder/eclipse中可以指定默认的字符集。
一般数据库都可以通过管理设置设定UTF-8
其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。
笔者以前在Jsp/Servlet时就采取这个原则,后来使用Struts、Tapestry、EJB、Hibernate、Jdon等框架时,从未被乱码困扰过,可以说适合各种架构。希望本方案供更多初学者分享,减少Java/J2EE的第一个拦路虎,也避免因为采取一些临时解决方案,导致中文问题一直出现在新的技术架构中
正是由于Java的跨平台特性,使得字符集问题必须由具体系统来统一解决,所以在一个Java应用系统中,解决中文乱码的根本办法是明确指定整个应用系统统一字符集。
指定统一字符集时,到底是指定ISO8859_1 、GBK还是UTF-8呢?
(1)如统一指定为ISO8859_1,因为目前大多数软件都是西方人编制的,他们默认的字符集就是ISO8859_1,包括操作系统Linux和数据库MySQL等。这样,如果指定Jive统一编码为ISO8859_1,那么就有下面3个环节必须把握:
输出途径也有几种:第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet,那么在输出时,也将根据操作系统的默认编码来选择输出编码,除非指定输出编码方式;还有输出途径是数据库,将字符串输出到数据库。
由此看来,一个J2EE系统的输入输出是非常复杂,而且是动态变化的,而Java是跨平台运行的,在实际编译和运行中,都可能涉及到不同的操作系统,如果任由Java自由根据操作系统来决定输入输出的编码字符集,这将不可控制地出现乱码。
因此,如果能统一Java系统的输入、输出和操作系统3者的编码字符集合,将能够使Java系统正确处理和显示汉字。这是处理Java系统汉字的一个原则,但是在实际项目中,能够正确抓住和控制住Java系统的输入和输出部分是比较难的。J2EE中,由于涉及到外部浏览器和数据库等,所以中文问题乱码显得非常突出。
最古老的解决方案是使用String的字节码转换,这种方案问题是不方便,我们需要破坏对象封装性,进行字节码转换。
还有一种方式是对J2EE容器进行编码设置,如果J2EE应用系统脱离该容器,则会发生乱码,而且指定容器配置不符合J2EE应用和容器分离的原则。
在Java内部运算中,涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么,在被Java转化之前,字符串是什么样的字符集? Java总是根据操作系统的默认编码字符集来决定字符串的初始编码,而且Java系统的输入和输出的都是采取操作系统的默认编码。
统一编码为ISO8859_1和GBK虽然带来编制代码的方便,但是各自只能在相应的操作系统上运行。但是也破坏了Java跨平台运行的优越性,只在一定范围内行得通。例如,为了使得GBK编码在linux上运行,设置Linux编码为GBK。
那么有没有一种除了应用系统以外不需要进行任何附加设置的中文编码根本解决方案呢?