用gb2312是可以传递中文简体的,但页面繁体部分就会是乱码了。
我现在设的是:
<%@ page contentType="text/html; charset=utf-8"%>request.setCharacterEncoding("utf-8");这样也应该算是编码设置一致的吧
我现在设的是:
<%@ page contentType="text/html; charset=utf-8"%>request.setCharacterEncoding("utf-8");这样也应该算是编码设置一致的吧
解决方案 »
- JAX-RS中,JSON转换为对象,Integer默认值如何设为null?
- struts2注解注入与spring注解注入比较
- jsp学习用书
- 文件上传的两个包
- ajax登陆问题
- ajax的问题,请高手指点啊!
- 汉字编码范围是从哪到哪
- javascript的问题。急急急急急急急急急急急急急急急急急急急急急急急急!
- jsp怎样弹出一个有是和否两个按钮的对话框,并且如何判断用户选择哪个按钮?
- 菜鸟问题:一件很奇怪的事情
- 我单击页面上预揽按钮,选择一张图片,传入数据库,点确定时候回到前一个界面,讲我刚才传入数据库的图片显示在页面上。
- 请问有人知道怎么样把servu和mysql配置在一起运行起来一起用啊??
<%
String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
%>
String a=null;
try{
if(str==null){
return null; }
else{
a=new String(str.getBytes("ISO8859_1"),"GBK");
return a;
}
}
catch(Exception e){
return null;
}
}
-------郭鹏
Jsp是一个很热门的话题,但让大多数人都头痛的是JSP页面中的乱码问题,笔者身有体会;曾为了解决中文乱码问题郁闷了好几天,试了很多方法都不行。最后在JSP专业人士的帮助下,终于解决。之后笔者曾对此做了一些小的研究。
首先我们先了解一下问题的原因。一般情况在在每个JSP页的头部都有这样一条语句:
<% page contentType="text/html; charset=gb2312" %>这条语句决定了此页面使用GB2312编码形式,而在数据库中一般用的是iso-8859-1字符集存储数据. 而Java程序在处理字符时默认采用统一的ISO-8859-1字符集(体现Java国际化思想),所以在添加数据时,默认的字符集编码是iso-8859-1,而页面采用的是GB2312,所以就出现乱码问题。为解决此问题应在存储的时候把GB2312换转成iso-8859-1。有此时候在读出时也会出现乱码,那么只需反过来就可以了,把iso-8859-1转换成GB2312。
具体实例归纳了以下几点,也许会对大家有一些帮助。
1、 在建立JSP页面时应该注意在jsp页面的头部加入一下代码
<% page contentType="text/html; charset=gb2312" %>
此方法是解决JSP页面显示时的乱码。
2、 有时还需在HTML代码中的<head></head>中加入这句
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
3、 在bean中用的是iso-8859-1编码,在jsp中一般用GB2312编码,处理此类乱码问题如下
String str=new String(strName.getBytes(“iso-8859-1”),”GB2312”);
具体用到此方法的地方为,当提交表单到bean(bean的功能是存储数据到数据库)表单提交后,数据库中存入的数据确变成了????,因此在调用bean之前应对编码进行转换,方法:String str=new String(request.getParameter().getBytes(“iso-8859-1”),”GB2312”);
这样,存入数据库的数据库的数据就可见了。
4、 对于页面间的参数传递也可以用这个方法来处理乱码问题:
public String getStr(String str)
{
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{}
return "null";
}
5、 在表单定义时加上这个属性有时也可以解决表单提交过程中出现的乱码
<form enctype="multipart/form-data"></form>
6、 提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF-8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.setCharacterEncoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。
里面的方法我试过了,还是不行,问题就在于我的页面既有简体又有繁体,所以不能设置成GB2312的。请遇到过此问题的高手赐教。
在你要发布的项目中加入下面的一个类SetCharacterEncodingFilter原码如下:
package filters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null; protected boolean ignore = true;
public void destroy() { this.encoding = null;
this.filterConfig = null; }
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException { if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
} chain.doFilter(request, response); } public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false; }
protected String selectEncoding(ServletRequest request) { return (this.encoding); }
}其实就是一个servlet然后在你的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>
这个办法就是在tomcat中的一个例子为了解决中文乱码具体的例子在tomcat里面有。路径如下:
\tomcat5\webapps\jsp-examples在这里有你自己找一下吧。在tomcat,jboss下都可以应用我测试过。
<%
request.setCharacterEncoding("GBK");
%>在数据库连接中指定useUnicode=true&characterEncoding=gbk另外做如下操作1) 实现一个Filter.设置处理字符集为UTF-8。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。) 2)只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
3)在你的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>3)打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding="UTF-8"
完整的应如下:<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
4)重启tomcat,一切OK。