以下,是中文乱码的各种解决方法,要记住了,很有用,肯定有一种方法能帮你解决的。希望能帮到你。
URIENcoding 设成GBK或GB2312
2. 表单中或传递字符串:本来输入的汉字是正常的,但是提交后再显示出来是乱码,因为提交的一般是 ISO8859编码,所以显示的时候要转成GB2312编码:
String S=new String(rsgetString("news")getBytes("gb2312"),"ISO8859_1");
//rsgetString("news")为待转换的字符串
然后使用S字符串的值就可以了
3. 有的服务器端的语言环境如果设成简体中文的也可以解决此类问题
4. 插入数据库中的字符是乱码
看看数据库中支持的是何种编码方式,用类似2中的方式作一下转换即可。
5. 总之,用jsp开发,碰到乱码,你得分析是读的时候发生乱码,还是写的时候发生乱码,用2中的转换,基本就能解决问题,有些时候写的时候做一次转换,例如:
String S=new String(rsgetString("news")getBytes("gb2312"),"ISO8859_1");
//读的时候在转换回来
String S=new String(rsgetString("news")getBytes("ISO8859_1"),"GB2312");
或者把ISO8859-1和GB2312 的位置换一下,自己多试试,就能找到解决问题的办法。
将乱码问题分为三类JSP页面显示中文乱码;表单提交乱码;数据库应用乱码
1) JSP页面内输出中文时出现乱码
解决方案在JSP文件中使用page命令指定响应结果的MIME类型,如<%@ page language="java" contentType="text/html;charset=gb2312" %>
2)表单提交乱码
表单提交时(post和Get方法),使用requestgetParameter方法得到乱码,这是因为tomcat处理提交的参数时默认的是iso-8859-1,表单提交get和post处理乱码问题不同,下面分别说明。
(1)POST处理
对post提交的表单通过编写一个过滤器的方法来解决,过滤器在用户提交的数据被处理之前被调用,可以在这里改变参数的编码方式,过滤器的代码如下:
package cngovbeijingitutil;
import javaioIOException;
import javaxservletFilter;
import javaxservletFilterChain;
import javaxservletFilterConfig;
import javaxservletServletException;
import javaxservletServletRequest;
import javaxservletServletResponse;
public class SetCharacterEncodingFilter implements Filter {
/
The default character encoding to set for requests that pass through this
filter
/
protected String encoding = null;
/
The filter configuration object we are associated with If this value is
null, this filter instance is not currently configured
/
protected FilterConfig filterConfig = null;
/
Should a character encoding specified by the client be ignored
/
protected boolean ignore = true;
// --------------------------------------------------------- Public Methods
/
Take this filter out of service
/
public void destroy() {
thisencoding = null;
thisfilterConfig = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (requestgetCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null) {
requestsetCharacterEncoding(encoding);
}
}
// Pass control on to the next filter
chaindoFilter(request, response);
}
/
Place this filter into service
@param filterConfig
The filter configuration object
/
public void init(FilterConfig filterConfig) throws ServletException {
thisfilterConfig = filterConfig;
thisencoding = filterConfiggetInitParameter("encoding");
String value = filterConfiggetInitParameter("ignore");
if (value == null) {
thisignore = true;
} else if (valueequalsIgnoreCase("true")) {
thisignore = true;
} else if (valueequalsIgnoreCase("yes")) {
thisignore = true;
} else {
thisignore = false;
}
}
protected String selectEncoding(ServletRequest request) {
return (thisencoding);
}
}
webxml文件加入过滤器
<filter>
<filter-name>Encoding</filter-name>
<filter-class>
cngovbeijingitutilSetCharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
<!--gbk或者gb2312或者utf-8-->
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<servlet-name>/</servlet-name>
</filter-mapping>
注意filter元素要放在所有webxml元素之前。
(2) Get方法的处理
tomcat对post和get的处理方法不一样,所以过滤器不能解决get的乱码问题,它需要在其他地方设置。
打开<tomcat_home>\conf目录下serverxml文件,找到对8080端口进行服务的Connector组件的设置部分,给这个组件添加一个属性:URIEncoding="GBK"。修改后的Connector设置为:
<Connector port="8080" max>
首先把你获取的页面的数据用DB的编码方式重新编码一下再存入DB
如String tstna=requestgetParameter("shijuanming");
改成String tstna=requestgetParameter("shijuanming");
tstna = new String(tstnagetBytes("ISO-8859-1", "GB2312"));
后面的一个编码方式,如果DB是GB2312,那就是这个,如果不是,改成DB相应的编码方式就行了
当然,把mysql 和 jsp上编码格式设置一致即可, 一般默认mysql的编码格式是UTF-8, 建议在jsp中也设置为UTF-8, 如果你不想这么做的话要改数据库格式, 也就是说你所有建立的表都要重新建立成GBK编码。
url传中文应当尽量避免这么做因为会乱码当然如果你所有所有的地方编码都统一的话就没用问题但是很难的建议所有地方都用utf-8
你可以
String name = new String(requestgetParameter("groupTitle")getBytes("ISO8859_1"),"你页面的编码方式");试下
之所以乱码因为经过了tomcattomcat的默认编码方式是ISO8859_1所以需要转换一下tomcat的编码方式也可以设置这个在tomcat的conf目录下的serverxml里面
以上就是关于jsp高手请进,我用jspsmartupload上传文件,但我表单获得的中文是乱码(UTF-8)的,如何解决全部的内容,包括:jsp高手请进,我用jspsmartupload上传文件,但我表单获得的中文是乱码(UTF-8)的,如何解决、jsp页面中a标签传值到Servlet中 中文变成乱码了 是怎么回事 编码全是UTF-8、JSP页面数据库中的中文出现乱码是怎么回事等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)