Servlet & JSP - 中文字符问题

Servlet 中的中文字符

来自 URL 参数部分的中文字符

Tomcat 默认接收数据的编码是 ISO-8859-1。所以当请求 URL 的参数部分含有中文字符,需要转换字符的编码。 

Enumeration<String> paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
    String paramName = (String) paramNames.nextElement();
    String paramValue = req.getParameter(paramName);
    String paramValueUTF8 = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(paramName + ": " + paramValueUTF8);
}

上述的方法的一个不足是:需要对所有的参数部分解码。可以直接在 Tomcat 的 server.xml 中将默认的编码设置为 UTF-8。

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

来自 POST 表单的中文字符

当客户端提交的表单内容包含中文字符时,可以在获取表单内容前,调用 request.setCharacterEncoding 方法来设置字符的编码:

req.setCharacterEncoding("UTF-8");
Enumeration<String> paramNames = req.getParameterNames();
while (paramNames.hasMoreElements()) {
    String paramName = (String) paramNames.nextElement();
    System.out.println(paramName + ": " + req.getParameter(paramName));
}

响应至客户端的中文字符

当响应至客户端的内容包含中文字符时,可以在获取输出流之前,调用 response.setContentType 方法来设置响应内容的类型及编码。 

resp.setContentType("text/plain;charset=utf-8");
resp.getWriter().println("中文字符");

HTTP 首部的中文字符

HTTP 首部只支持 ASCII 编码,可以对首部进行 URL 编码。

resp.setContentType("text/plain;charset=utf-8");
String fileName = URLEncoder.encode("中文名称.txt", "UTF-8");
resp.setHeader("Content-disposition", "attachment;filename=" + fileName);

 

JSP 中的中文字符

JSP 页面内容的中文字符

当 jsp 页面内容包含中文字符时,可以使用 page 指令来指定字符编码。

<%@ page language="java" contentType="text/html; UTF-8" pageEncoding="UTF-8"%>
<!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>中文标题</title>
</head>
<body>
中文内容
</body>
</html>

JSP Java 代码中的中文字符

JSP 的本质即 Servlet,所以当 JSP 页面中的 Java 代码包含中文字符时,则可以参考 Servlet 中是如何解决中文字符的。

 

posted on 2016-05-02 16:40  huey2672  阅读(312)  评论(0编辑  收藏  举报