<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>messyCode.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body>
<h2>乱码测试</h2>
表单:(post方式)
<form action="/doWeb/MessyCodeServlet" method="post">
textAboutChinese:<input type="text" name="content"/>
<input type="submit" value="submit">
</form>
<br/>
表单:(get方式)
<form action="/doWeb/MessyCodeServlet" method="post">
textAboutChinese:<input type="text" name="content"/>
<input type="submit" value="submit">
</form>
<a href="/doWeb/MessyCodeServlet?content='撒旦法斯蒂芬'">连接测试</a>
</body>
</html>
以上是测试的html页面,下面是对应的post get url方式提交的中文乱码处理:
//post方式提交:
//此时在console下显示的内容为:
//获取到的内容:é¿æ¯é¡¿å 【乱码了】
/*
我们通过表单的提交将input标签中的内容从messyCode.html中提交到MessyCodeServlet中来,在html中:可以通过查看编码知道【编码形式:utf-8】
而我们通过post方式是将内容封装到请求体,然后发给Web服务器,但是服务器却是以ISO-8859-1的形式接受的,所以就会产生乱码的现象,因此让服务器段以utf-8
接受即可。
通过查看HTTP-Watch得到:
POST DATA:
content 阿斯顿发 44
*/
request.setCharacterEncoding("utf-8");//需要在请求被使用之前,对请求体进行修正
String content = request.getParameter("content");
System.out.println("处理后的内容:"+content);
//get方式提交:
//获取的内容:没有进过处理获取到的内容:é¿æ¯é¡¿å
//get方式是通过请求行传送的:content=%E5%9C%A3%E8%BE%BE%E8%8F%B2
/*
此时利用之前说的正对post方式的方式就没有用了,因为setCharacterEncoding();是针对请求体的...
但是不变的始终是字节码.那么我们就可以通过字节来构建我们需要的形式。
其实这个方式应该来说是可以针对post和get的两种情况的,从byte得到的
*/
content=new String(content.getBytes("ISO-8859-1"),"utf-8");
System.out.println("处理后的内容:"+content);
/*
没有进过处理获取到的内容:é¿æ¯é¡¿å
处理后的内容:阿斯顿发
*/
//针对 a标签提交的
//除了表单的post方式是可以以post的方式提交的,其他的请求都应该是get的形式
/*
url:http://localhost:8080/doWeb/MessyCodeServlet?content=%27%E6%92%92%E6%97%A6%E6%B3%95%E6%96%AF%E8%92%82%E8%8A%AC%27
使用处理post的处理方式:
处理后的内容:'ææ¦æ³æ¯èè¬'
使用get的处理方式:
没有进过处理获取到的内容:'ææ¦æ³æ¯èè¬'
处理后的内容:'撒旦法斯蒂芬'
*/
content=new String(content.getBytes("ISO-8859-1"),"utf-8");
System.out.println("处理后的内容:"+content);
/*
总结:其实有时候处理乱码会变得特别麻烦,不管怎么弄还是乱码,这个时候就要分清楚这个码到底是在哪里乱的【PS:乱码 -> messyCode 学了个单词】
*/