字符串里有中文,在一些情况下会导致出错。比如放在cookie时如果带有中文就会错。
思路:把字符串先统一化成UTF-8编码,之后再变回来即可。
自己写了一个test.jsp,代码如下:
注:需要用到两个类,java.net.URLEncoder和java.net.URLDecoder
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
String str="2015年10月"; //带有汉字
String inner_str=URLEncoder.encode(str,"UTF-8"); //转化为内部的utf-8编码
String str_new= URLDecoder.decode(inner_str,"UTF-8"); //再将内部的utf-8编码重新变为真正的字符串
%>
inner_str= <%= inner_str %>
<br>
str_new= <%= str_new %>
</body>
</html>
结果如下:
inner_str= 2015%E5%B9%B410%E6%9C%88
str_new= 2015年10月
方法2:
先转化为字节数组,之后再转回来
参见test2.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ page import="java.util.*" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
String s = "你好";
System.out.println("开始");
//编码
byte[] utf = s.getBytes("utf-8"); //得到用utf-8编码的字节数组
byte[] gbk = s.getBytes("gbk"); //得到用gbk编码的字节数组
System.out.println("utf-8编码:" + Arrays.toString(utf)); //
System.out.println("gbk编码:" + Arrays.toString(gbk)); //
//解码
String s1 = new String(utf, "utf-8");
String s2 = new String(gbk, "gbk");//
String s3 = new String(gbk, "utf-8");//
System.out.println("--------------------");
System.out.println("utf-8解码:" + s1);
System.out.println("gbk解码:" + s2);
System.out.println("gbk用utf-8解码:" + s3);
%>
</body>
</html>
结果:
开始
utf-8编码:[-28, -67, -96, -27, -91, -67]
gbk编码:[-60, -29, -70, -61]
--------------------
utf-8解码:你好
gbk解码:你好
gbk用utf-8解码:???
乱码案例:
index.jsp中
<a href="show.jsp?name=张三&sex=男">解决中文乱码</a>
show.jsp中
<body>
name参数的值为:<%=new String(request.getParameter("name").getBytes("iso-8859-1"),"UTF-8") %>
<br>
sex参数的值为:<%=request.getParameter("sex") %>
</body>