jsp 编码问题
2012-03-03 18:54
141 查看
jsp编写网站时,经常会出现如下图所示的乱码情况:
![](http://b92.photo.store.qq.com/psb?/10c0ddec-acfa-423e-bfa8-a420ed0f2099/06g5fQ5cVWy4WwC5pq1M.omkkmQvx0*KrUA434mpjjc!/b/YTzv6TaaiwAAYo7n5jbgjQAA)
原因是:
request.setCharacterEncoding("GBK");
String title=request.getParameter("title");
// new String(new String(title.getBytes("GBK"),"ISO-8859-1").getBytes("ISO-8859-1"),"utf-8" );
而本来应该是
request.setCharacterEncoding("UTF-8[/b]"); 的。
一个中文字符,GBK占两个字节;UTF-8占三个字节。
以上例来说,本来应该显示“反扫荡”,UTF-8编码的,9个字符。实际上http协议传过来的就是9个字节。注意:网络传输都是UTF-8编码的。
如果对9个字节按照GBK编码码的话,就是4个中文字符加一个字节,所以就出现了如上图所示的乱码情况。
执行 new String(title.getBytes("GBK") 时,应该返回的是10个字节,然后这10个字节又按照UTF-8编码,就是三个中文字符加一个字节,所以就出现了如上图所示的乱码现象。
然后我用java程序验证了上面的原理:
@Test
public void Test0108_22(){
String input="反扫我";
try
{
System.out.println(input.getBytes("GBK").length);
System.out.println(input.getBytes("UTF-8").length);
System.out.println(bytes2HexString(input.getBytes("UTF-8")));
String title= new String(input.getBytes("UTF-8"),"GBK");
System.out.println(title);
String new_title=new String(new String(title.getBytes("GBK"),"ISO-8859-1").getBytes("ISO-8859-1"),"utf-8" );
System.out.println(new_title);
System.out.println(bytes2HexString(new_title.getBytes("UTF-8")));
System.out.println(new_title.getBytes("UTF-8").length);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
运行结果:
![](http://b94.photo.store.qq.com/psb?/10c0ddec-acfa-423e-bfa8-a420ed0f2099/FdMtFIBJ96QXsSXkcn5WEZONIJh9XS0irUQ7z11iHHc!/b/YfjaCzjZRQAAYvb.FDgIRgAA)
z总结:"反扫我"这三个中文字符,如果按照GBK 编码,就是6个字节;如果按照UTF-8编码,就是9个字节;
实际上, request.setCharacterEncoding("UTF-8[/b]"); 就是解码[/b]的过程,即告诉程序把9个字节按照"UTF-8[/b]"解码,这样就ok了。
网站中中文的编码一般有如下三种情况
(1)UTF-8
(2)GBK
(3)GB2312
原因是:
request.setCharacterEncoding("GBK");
String title=request.getParameter("title");
// new String(new String(title.getBytes("GBK"),"ISO-8859-1").getBytes("ISO-8859-1"),"utf-8" );
而本来应该是
request.setCharacterEncoding("UTF-8[/b]"); 的。
一个中文字符,GBK占两个字节;UTF-8占三个字节。
以上例来说,本来应该显示“反扫荡”,UTF-8编码的,9个字符。实际上http协议传过来的就是9个字节。注意:网络传输都是UTF-8编码的。
如果对9个字节按照GBK编码码的话,就是4个中文字符加一个字节,所以就出现了如上图所示的乱码情况。
执行 new String(title.getBytes("GBK") 时,应该返回的是10个字节,然后这10个字节又按照UTF-8编码,就是三个中文字符加一个字节,所以就出现了如上图所示的乱码现象。
然后我用java程序验证了上面的原理:
@Test
public void Test0108_22(){
String input="反扫我";
try
{
System.out.println(input.getBytes("GBK").length);
System.out.println(input.getBytes("UTF-8").length);
System.out.println(bytes2HexString(input.getBytes("UTF-8")));
String title= new String(input.getBytes("UTF-8"),"GBK");
System.out.println(title);
String new_title=new String(new String(title.getBytes("GBK"),"ISO-8859-1").getBytes("ISO-8859-1"),"utf-8" );
System.out.println(new_title);
System.out.println(bytes2HexString(new_title.getBytes("UTF-8")));
System.out.println(new_title.getBytes("UTF-8").length);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
运行结果:
z总结:"反扫我"这三个中文字符,如果按照GBK 编码,就是6个字节;如果按照UTF-8编码,就是9个字节;
实际上, request.setCharacterEncoding("UTF-8[/b]"); 就是解码[/b]的过程,即告诉程序把9个字节按照"UTF-8[/b]"解码,这样就ok了。
网站中中文的编码一般有如下三种情况
(1)UTF-8
(2)GBK
(3)GB2312
相关文章推荐
- http 协议编码问题+JSP解决中文乱码问题
- BREW终端下通过http协议访问jsp的编码问题
- jsp编码问题与基本知识,上课笔记
- Java jsp/servlet GET/POST 字符集编码问题(中文乱码)
- JSP/Servlet 中的汉字编码问题
- jsp页面编码报错问题
- 在jsp中,获取页面中中文输入的值乱码问题解决。修改tomcat的编码问题
- 个人对JSP编码乱码问题的理解
- JSP/Servlet中的汉字编码问题
- MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- Eclipse,tomcat及jsp页面编码的设定解决的中文乱码问题
- jsp中框架页面请求中的中文编码问题
- JSP页面编码问题
- JAVA_OA(十四):SSM练手项目bug-JSP页面传递参数的编码问题
- 使用JSP开发应用程序时的编码(中文等乱码)问题的建议解决方案(包括接受request和数据库操作)
- 静态页面转换为动态JSP页面时编码问题
- jsp编码问题
- 关于jsp页面中的编码问题总结
- JSP/Servlet中的汉字编码问题
- JSP/Servlet 中的汉字编码问题