欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP&Servlet中字符编码的转换

程序员文章站 2024-02-22 15:47:36
...

1. 在jsp中声明字符编码

<%@ page contentType="text/html; charset=utf-8" %>
或者
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
或者
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

2. 在HTML文档的头部

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

3. 在设定MySQL数据库URL时

String dbUrl="jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf-8";

4. 当请求方式是“Post”时

此时请求参数位于请求头的正文部分,可以将正文的字符编码进行设置再读取。

request.setCharacterEncoding("utf-8");
String aname=request.getParameter("aname");

当请求方式为“Get”时,请求参数位于请求头的URI中,此时使用上述方法不能改变请求参数的字符编码。

5. 直接对字符串编码进行转换

String str=...;
str=new String(str.getBytes("GB2312"),"UTF-8");

HTTP的Get参数默认为ISO-8859-1编码,所以转码可以:

String data=request.getParameter("aname");
data = new String(data.getBytes("ISO-8859-1"), "UTF-8");

6. 上传文件时转码

org.apache.tomcat.util.http.fileupload.FileItem.getString("utf-8")
或者
org.apache.commons.fileupload.FileItem.getString("utf-8")

7. Cookie的转码

Cookie不能直接存放中文,会出现 “Control character in cookie value or attribute” 的错误。需将中文字符转成BASE64编码。

  • 编码
import java.net.URLEncoder;
...

String encodeUserName = URLEncoder.encode(userName, "UTF-8");
String encodePassword = URLEncoder.encode(password, "UTF-8");

Cookie cookie = new Cookie("user", encodeUserName + "-" + encodePassword);
cookie.setMaxAge(60 * 60 * 24 * 7); // 单位:秒
response.addCookie(cookie);
  • 解码
Cookie[] cookies=request.getCookies();
for(int i=0;cookies!=null && i<cookies.length;i++){
	if(cookies[i].getName().equals("user")){
		//对Cookie中的中文信息进行BASE64的解码
		String str=cookies[i].getValue().split("-")[0];
		userName=URLDecoder.decode(str,"UTF-8");
		str=cookies[i].getValue().split("-")[1];
		password=URLDecoder.decode(str,"UTF-8");
	}
}

8. 对返回客户端的响应进行编码设定

HttpServletResponse response默认编码是“ISO8859-1”。

response.setCharacterEncoding("gbk");
或者
response.setCharacterEncoding("utf8");
相关标签: java jsp servlet