应用ssh框架,数据库是oracle的,字符集是ISO-8859-1,页面charset是gb2312的,在数据保存的时候我能够将中文转成ISO-8859-1存储到数据库中,但是在取出来之后我不想在取得数据的每个处理过程中手动的将ISO-8859-1的编码形式转换成GB2312的,想通过配置或者其它方式省时省力的转换!请问如何能够做到?
解决方案 »
- JSP页面运行报404错问题?求解答??
- 用java实现web简版机房环境监测 ,求高手给小弟解答
- jsp 页面导出excel2003 2007时能自动判断是2003,2007的吗?
- JSP中调用chm文件乱码问题,请高手帮忙解决,在线等.........
- 下载文件时为什么要刷新一遍才能下载
- 求教前辈,我用struts2和hibernate编的程序出这样的错误,是因为什么,怎么解决?谢谢
- SERLVET中如何防止客户重复点击
- 请问在tomcat里的servlet文件怎么正确放在一个package里呀
- 老问题
- 请问int型参数如何传递?
- Struts2 namespage配置问题
- java连接oracle10g跟上个版本有什么区别
String tempStr = "";
try {
tempStr = new String(str.getBytes("ISO-8859-1"), "GB2312");
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
在web.xml里加入这一段
……
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
spring有提供encoding的过滤器<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
</filter><filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我一般采用拦截器的机制来实现权限控制.或者是spring事务处理.
页面上体现从数据库里面取出来的“汉族”两个字查看jsp文件的源文件显示为“ºº×å”。页面头部无论设置成什么都是这个字符串。
关于字符集不行多说了,到网上搜索一下就能出现一大堆!
说说我的具体环境和问题,然后给分了。
首先:说说jsp文件上面的设置:
<%@page contentType='text/html;charset=utf-8' %>
这句里面 这个 “utf-8” 是很关键的设置,首先页面表单会根据这个指定的字符集来解析form中的输入,即把输入的东西转码成这个指定的字符集的编码形式;最后,当页面输出的时候,如果在form表单中有数据,那么jsp页面也会根据这个来解析你的表单里面的数据。
其次:说说jsp文件的头部分的这个设置:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
这个是指定在浏览器里面用什么编码来浏览此网页的内容。就如同在浏览器里面选择页面的语言一样,在我的测试过程中发现,如果设置了<%@page contentType='text/html;charset=utf-8' %> ,这个设置将不起作用,但是如果页面头设置成<%@page contentType='text/html;charset=8859_1' %>,这个部分又起作用了,分析可能这两个设置取字符集较大的那个来设定页面浏览用的字符集。注意:只是浏览的时候的字符编码。
再次:说说struts2的i18n设置,这个设置是struts封装表单数据用的编码方式,在action里面得到的表单数据(不是通过request.getParameter方式获得的数据)的字符集就是这个设置指定的字符集。当action返回页面的时候,又用这个指定的字符集来封装action里面的对象。再次:说说request,可能我说的不正确,这是我的推理而已:struts2封装的request和我们平时所说的request不是一个东西,应该是requst又自己搞了一个request的对象,把action里面的对象放到里面去。具体的过程就不知道了。最后说说struts2的textfiled标签和property标签,property标签有个escape属性,能够返回未转码之前的struts2的request里面的内容,而textfiled不能够返回这个没有转码的东西。总结一下我要做的东西遇到的一点问题:
正如我上面说的,我的数据库字符集是8859_1的,我想通过只改变配置来达到在页面上正常浏览的目的,这几天发现无论如何设置都不可以。按照正常的思维:由于我的数据库是8859_1的,在页面上显示gb2312的,所以应该在jsp页面中设置头<%@page contentType='text/html;charset=8859_1%>,设置浏览字符编码<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,struts2的i18n设置为8859_1,此时在页面中就可以正常浏览我的数据了,可是实践证明不可以,页面表单里面还是乱码!而在property标签里面使用escape="false"属性显示request里面的内容可以正常看到我的数据,即未转码前的数据是正确的。奇怪的是在struts2的下拉列表中可以正常显示,可见struts2的各个标签还是不同的。我的问题的解决办法:1:改变数据库的字符集编码为8859_1;2在数据取出来的时候进行转码,其他的设置就不是按上面说的了,在此略过。以上情况的造成个人认为可能是struts的一个漏洞,不知道有没有高人指教一下!我用的struts是struts2.0.11.