如何解决Java WEB应用中的乱码问题(4)

 我们可以在web.xml使用这个filter。web.xml的相应配置如下:


 view plaincopy to clipboardprint?
<filter>  
    <filter-name>Character Encoding Filter</filter-name>  
    <filter-class>  
        CharacterEncodingFilter   
    </filter-class>  
    <init-param>  
        <param-name>encoding</param-name>  
        <param-value>UTF-8</param-value>  
    </init-param>  
</filter>  
<filter-mapping>  
    <filter-name>Character Encoding Filter</filter-name>  
    <url-pattern>/*</url-pattern>  
</filter-mapping>  

  通过上述两种方式的预处理,在servlet中取出的数据可以不必进行ISO-8859-1解码而直接使用。

  字符集的选择

  在处理application/x-www-form-urlencoded类型的数据过程中,需要注意的另一个问题是字符集的选择问题。如上所述,不论是request-line还是request-body,其URLEncoding所使用的字符集都是当前网页在浏览器上显示时所使用的字符集。而这个信息又是HTTP服务器端生成HTML网页时,在HTTP响应中提供的。

  当HTTP服务器接收到一个HTTP请求时,服务器总是需要向用户端发送一个HTTP响应。HTTP响应数据与HTTP请求数据格式相同,同样由以下几个部分组成:


<response-line>
<headers>
<CRLF>
[<response-body><CRLF>]


  下面描述的是请求一个HTML网页数据时服务器的响应信息:


HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 265
Date: Thu, 17 Dec 2009 05:20:36 GMT
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
[End]


  其中headers的Content-Type指定了数据流的数据格式以及显示用的字符集。这一指标可以通过以下几种方式指定:

  1. HTML网页

  在HTML网页的中存在多个 标签,其中可以设置Content-Type。例如:


<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">


  2. JSP网页

  JSP网页中,除了 标签之外,还需要在JSP网页头部设置如下代码:


<%@ page language="Java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 


  3. Servlet类

  如果要在Servlet类中通过response向用户端传送HTML数据,需要在传送前指定Content-Type。代码如下:


 response.setContentType("text/html;charset=UTF-8");


  通过上述三种方式,可以确保响应数据传送到用户端浏览器时,浏览器使用正确解码方式和字符集显示其内容。

  结束语

  总之,Content-Type是联系用户端与服务器端的纽带,通过这一指标,双方得以对相关的数据进行正确的编码与解码。只要了解了Content-Type的作用以及使用方法,乱码问题就会迎刃而解。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpdjw.html