乱码问题思考及解决方法
一、引起乱码的原因有:
1、响应中的乱码:即显示页面上的乱码,如index.jsp显示出来时,"用户名"显示为乱码
2、表单提交时的乱码:即在表单的文本框中输入为中文的时候提交到服务出现乱码
二、针对各原因的解决思路及方法:
1、响应中的乱码:
说明:
(1).常见的编码方式:
ISO-8859-1,GB18030,GB2312,UTF-8;
(2)pageEncoding的含义:
pageEncoding表示的是该JSP页面的编码,也就是你要保存一个JSP页面,系统会以这个编码来保存(我们知道文本文件另存为的时候会弹出一个提示窗口,你细心一下就会发现原来可以选择不同的"编码"来保存),
同理,JSP文件默认保存的时候会以你设置的pageEncoding的属性值保存该JSP页面。
Eclipse中如果你设置了Window\preferences\jsp files面版上的Encoding为某一个值如GB2312,则以后新建一个JSP文件的时候系统会自动加上pageEncoding="GB2312"这一属性。
注意:pageEncoding="ISO-8859-1"的时候是不能保存中文的,就是说如果你设置为ISO-8859-1,但又想在JSP文件中写一段中文,保存文件的时候会提示不能保存。
(3)JSP实现过程:
客户提交URL请求如:www.WebTest.com/index.jsp
服务器接收到请求
服务器寻找本地文件index.jsp
服务器将index.jsp转译为index.java再编译为index_jsp.class文件,并将其作为响应发给客户端
客户端浏览器解释执行得到HTML代码并显示给客户
由上可见,要解决响应中的乱码问题要注意三点:
I、对本地文件index.jsp的pageEncoding属性检查,因为服务器接到请求后首先是找这个文件。pageEncoding可设为GB18030,GB2312,UTF-8
II、JSP使用<%@ page contentType="text/html; charset=GB2312" %>为响应添加编码信息,这里如果charset="ISO-8859-1",显示出来的中文肯定是乱码。
III、记得在<head></head>中加入<meta http-equiv="Content-Type" content="text/html; charset=GB2312">注意这句话应是在<head>之后的首句话,因为有可能<title></title>中使用了中文,
如果加在</title>后,则title内容显示会出现乱码。这里的charset值最好与contentType中的charset值一致。
经过上面三步即可解决响应乱码即显示出来的页面中有乱码的情况。
2、表单提交乱码:
说明:
(1)表单的文本框中输入为中文的时候提交到服务出现乱码的主要原因是:表单提交即发送请求的过程中使用的编码是ISO-8859-1.
表单提交方式有POST和GET,所以表单提交乱码为POST乱码和GET乱码
I、POST乱码
解决方法是在JSP页面中加入语句:<% request.setCharacterEncoding("UTF-8"); %>
II、GET乱码
POST方式下的解决方式还算简单,因为POST方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决。
GET方式下会将参数直接附加到url后面,这部分参数无法使用request.setCharacterEncoding()处理,结果就是get形式的所有中文都变成了乱码。
这里只能对提交的内容转換成字节再转換成另一编码的字符:如下:
<%
String username = request.getParameter("username");
byte[] bytes = username.getBytes("iso-8859-1");
String result = new String(bytes, "gb2312");
out.print(result);
%>
理解起来很简单:首先我要获得与现有编码不同的编码的字符串,String类中构造函数:new String(byte[],charset ch);
那么现在我需要一个字节数组,即要对原来的字符串进行转换,从字符串变成字节数组,String类中的getBytes(charset ch)函数
所以结合起来就是:new String(username.getBytes("iso-8859-1"),"gb2312");
参考链接:http://www.family168.com/tutorial/jsp/html/jsp-ch-02.html
在对post表单提交的时候可能要用到filter具体代码:
package com.lwf.struts.filter;
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;
public class CharacterEncodingFilter implements Filter {
private String encoding;
private FilterConfig config;
public void destroy() {
this.encoding = null;
this.config = null;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig flterConfig) throws ServletException {
this.config = flterConfig;
encoding = config.getInitParameter("encoding");
}
}
在web.xml中创建:
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>com.lwf.struts.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
本文将深入探讨“JSP乱码”的多种解决方案,并提供实用的解决策略。 1. **理解字符编码的基本概念** - 字符编码是计算机对文字进行存储和处理的标准,常见的有ASCII、GBK、UTF-8等。 - JSP页面默认使用ISO-8859-1...
### jsp乱码解决方案 #### 一、引言 在Web开发中,特别是使用Java Server Pages (JSP)进行开发时,字符编码问题是一个经常遇到的技术难题。如果处理不当,很容易导致网页显示乱码,影响用户体验及数据的正确性。...
本文将深入探讨JSP乱码的原因及其解决方案,帮助开发者有效地处理这类问题。 ### 1. JSP乱码的成因 - **字符集设置不一致**:JSP文件、HTML页面、HTTP头、Servlet输出以及数据库存储等环节的字符集设置不一致,...
下面我们将详细讨论 JSP 中文乱码问题的成因和解决方法。 JSP 中文乱码问题的成因 JSP 中文乱码问题的成因主要有两方面,一是 Java 和 JSP 文件本身编译时产生的乱码问题,二是 Java 程序于其他媒介交互产生的乱码...
文档《JSP各种乱码的处理(一).doc》和《JSP各种乱码的处理(二).doc》中可能详细列举了各种JSP乱码问题的实例及解决方法,包括但不限于文件上传、读取流、数据库操作等方面,建议参考学习,以便更全面地理解并解决...
### JSP乱码问题解决 #### 一、JSP页面显示乱码 在JSP页面开发过程中,中文乱码是一个常见的问题。这个问题主要是由于服务器端和客户端(浏览器)的编码设置不一致导致的。 **原因分析:** 1. **服务器编码设置...
首先,我们需要了解jsp中文乱码问题产生的原因,然后再讨论解决方案。 jsp中文乱码问题产生的原因是由于jsp页面的编码方式和浏览器的编码方式不一致所致。jsp页面的编码方式默认为ISO-8859-1,而浏览器的编码方式...
本文将深入探讨这个问题,提供解决方案。 首先,我们需要理解乱码的根源。乱码通常由于字符编码不一致导致,尤其是在JSP文件中,不同的编码设置可能会引发问题。例如,JSP文件本身的编码、HTTP响应的Content-Type头...
### JSP中文乱码问题完全解决方案 #### 一、引言 在JSP开发过程中,中文乱码问题一直是困扰开发者的一大难题。由于JSP页面、请求参数等涉及到多种编码方式,如Unicode、GB2312、GBK以及UTF-8等,如果不进行适当的...
更推荐的解决方案是使用Filter,全局设置请求的字符编码为UTF-8。创建一个名为`SetCharacterEncodingFilter`的过滤器类,并在`web.xml`中配置,将`encoding`参数设置为"UTF8"。这样,所有的请求都会通过这个过滤器,...
本文将详细解析JSP `include` 乱码问题的成因以及解决方法。 首先,我们要理解乱码产生的根本原因。乱码通常是由于字符编码不一致导致的。在JSP中,页面的编码、包含的文件的编码以及服务器的默认编码如果设置不...
解决jsp乱码问题的方法有多种,以下是一些常见的解决方案: 1. 设置pageEncoding参数 设置pageEncoding参数可以解决jsp页面中的乱码问题。例如,在jsp页面中指定pageEncoding="UTF-8",那么jsp编译器将使用UTF-8...
jsp中文乱码问题详解 在jsp中文乱码问题中,乱码的出现是由于编码格式不一致所导致的。在jsp文件中,存在三个地方的编码格式:jsp文件的存储格式、解码格式和控制浏览器的解码方式。如果这三个地方的编码格式不一致...
### JSP中文乱码问题最优解决方法 在Web开发中,特别是使用Java Server Pages(JSP)进行网页设计时,中文乱码问题是一个常见的技术挑战。本文将详细探讨如何有效地解决JSP页面中的中文乱码问题,并提供具体的解决...
本文将详细讲解三种解决JSP乱码的方法。 ### 1. 设置页面编码 JSP页面的编码设置是解决乱码问题的基础。在JSP文件的顶部,使用`<%@ page>`指令设置页面编码。例如: ```jsp ;charset=UTF-8" language="java" %> `...
通过以上方法,我们可以有效地解决JSP中文乱码问题。在实践中,理解字符集的工作原理,以及其在不同环节中的应用,对于预防和解决乱码问题至关重要。希望这个总结能帮助到大家,减少在查找和调试这类问题上花费的...
以下是一些关键的知识点和解决方法: 1. **JSP页面乱码** 当JSP页面中的中文字符无法正确显示时,通常是因为没有指定页面的字符集编码。JSP支持多种字符集,如GBK、UTF-8等。为解决此问题,可以在JSP页面顶部添加`...
除了上述基本的过滤器解决方案,还可以根据实际项目需求进行更复杂的编码管理,例如,针对不同的请求路径或HTTP方法设置不同的编码,或者在处理文件上传时考虑文件名的编码问题。 此外,对于"中文乱码问题.txt"这样...