1Tomcat中编码问题总结
编码问题会出现在:
l页面中的乱码;
lPOST参数乱码;
lGET参数乱码;
2 页面中编码处理
页面中的中文编码处理方式:
l把项目编码设置为UTF-8;
l在页面中设置<%@pagepageEncoding="UTF-8"%>
或者<%@pagecontentType="text/html;charset=UTF-8"%>。
无论是<%@pagepageEncoding="UTF-8"%>,
还是<%@pagecontentType="text/html;charset=UTF-8"%>。
都会在响应页面时,给客户端浏览器发送contentType响应头信息,告诉客户端浏览器当前页面使用的是UTF-8编码。
只要你的页面使用的编码,与发送给浏览器的contentType中的编码一致,那么就不会出现页面乱码问题。客户端浏览器会使用contentType中给定的编码来显示页面!
3 POST参数编码
处理POST编码问题!
我们知道,请求信息中,只有POST存在正文,所谓POST参数编码就是就是请求正文的编码。
默认情况下,使用getParameter()获取POST请求参数时,使用的是ISO-8859-1编码。
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(name);
因为在获取参数时已经被错误的编码了,但因为我们知道,乱码的两个原因:本来是使用UTF-8编码的,还错误的使用了ISO-8859-1编码。所以我们可以先使用ISO-8859-1获取字节数组,然后再使用正确的UTF-8编码得到字符串,这样就没问题了。
request的setCharacterEncodng()可以设置编码,当然这必须在调用所有的getParameter()方法之前调用request的setCharacterEncodng()方法来设置编码,这样,就不会使用ISO解读字节串了,而是使用你给定的编码来解读。
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println(name);
对于每个请求,只需要调用request的setCharacterEncodng()一次,然后所有getParameter()都会使用这个编码来解读参数。但要注意,只对请求正文有效,即POST参数。
4GET参数编码
GET参数不在请求正文中,而是在URL中。所以不能使用request的setCharacterEncodng()来设置GET参数的编码。
处理GET参数编码可以有两种方式:第一种是设置<Connector>元素的URIEncoding属性的值为UTF-8。即conf\server.xml中的<Connector>元素的URIEncoding属性。
一旦设置了这个属性,那么对于GET参数就直接是UTF-8编码的了。但是,<Connector>元素来说,对整个Tomcat都是有效的!也许将来你的项目与其他人的项目使用同一个Tomcat,而其他人的项目不想使用UTF-8编码,那么就不方便了。所以这种处理GET参数编码的方式是不可取的。
那么另一种方式就是自己来把编码还原了。这种方式也是我们今后处理的方式。
String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(name);
5 浏览器地址栏编码
如果你直接通过IE地址栏中给出URL,而不是通过超链接方法服务器。而且在URL中给出了请求参数,那么这个参数是GBK编码的。
这个地址栏中的URL是我直接输入的,而不是通过点击超链接访问的,这个参数的编码就是OS默认编码GBK。
没有办法处理这问题,因为在页面中使用的是UTF-8编码,那么Servlet需要使用UTF-8来解码。但如果用户在地址栏中直接输入URL,那么就是GBK。这时我们的Servlet真是不知道使用什么编码才好了。
但直接在地址栏中根本就不应该直接输入带有参数的URL。
注意,这里说的是地址栏中直接输入URL,而不是点击超链接。因为超链接中的URL是受页面的编码控制的。
6 垃圾的IE6对UTF-8不友好
IE6对UTF-8不是很友好!它会把两个字节当成一个中文来处理,当字节数为奇数时,那么就最后一个字节就会丢失。例如我们的GET参数是“大家好”,对于UTF-8编码而言,它就是9个字节,因为中文在UTF-8编码中3个字节,三个汉字对应9个字节。IE6认为2个字节是一个汉字,那么最后一个字节不会发送到服务器端,IE6很不安全。
7JavaScript对超链接做URL编码
处理这个问题的办法是把GET请求中的参数使用JavaScript做URL编码,URL编码后的内容就不再是中文了,这样IE6也就不会丢失字节了。
<a href='javascript:_go()'>Encoding</a>
<script type="text/javascript">
function _go() {
location.href = encodeURI("EncodingServlet?name=大家好");
}
</script>
http://localhost/encoding/EncodingServlet?name=%E5%A4%A7%E5%AE%B6%E5%A5%BD
在使用URL编码后,大家好已经变成了%E5%A4%A7%E5%AE%B6%E5%A5%BD。这样就不会再丢失字节了。
分享到:
相关推荐
Java开发乱码问题解决方法汇总 ...Java开发乱码问题解决方法汇总中,我们总结了七种常见的解决方法。这些方法可以帮助读者避免乱码问题的发生。如果读者在实际开发中遇到乱码问题,可以尝试使用这些方法来解决问题。
汉字编码问题总结 GB2312-80 编码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。GB2312 收录...
这些问题产生的根本原因在于Windows系统默认使用GBK编码,而Linux系统和Qt编译器默认使用UTF-8编码,当使用GBK编码的代码文件被UTF-8编码的编译器解释时就会出现乱码。 为了解决这个问题,首先需要改变开发环境中的...
struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结struts处理中文乱码问题总结
本文主要总结了五个方面可能导致的乱码问题及解决方案,帮助开发者们更好地理解和解决这些问题。 #### 一、HTML 页面转UTF-8 编码问题 1. **元数据标签**:确保在`<head>`标签内,在`<title>`标签之前添加`;...
### 网页字符编码问题总结及解决 在日常的网页开发过程中,经常会遇到字符编码导致的乱码问题。本文将结合实践经验,深入探讨不同情况下乱码产生的原因,并提出相应的解决方案。 #### 一、理解字符编码的基础概念 ...
总结来说,Android的乱码问题主要涉及URL、文件名和源代码等场景,关键在于正确处理字符编码的转换。了解各种编码方式,掌握如何在Java和Android中进行编码转换,以及熟悉相关工具的使用,都将有助于我们有效地解决...
HTML页面乱码问题是一个常见的开发痛点,特别是在处理多种编码格式时。本文将深入探讨这个问题,以便更好地理解和解决这类问题。 首先,我们需要理解编码的基础知识。字符编码是用来将字符(如字母、数字、符号)...
总结来说,解决Ajax URI乱码问题的关键在于理解和匹配浏览器的编码行为,并在服务器端进行相应的配置。通过以上策略,可以有效地解决大部分浏览器的乱码问题,实现更好的跨浏览器兼容性。然而,对于特定情况,可能还...
中文乱码问题分析 ...中文乱码问题是 Java 和 JSP 开发中的一种常见问题,解决这些问题需要注意编码方式的一致性,避免在不同的编码方式之间的转换,确保在不同的交互过程中使用的编码方式保持一致。
### 中文乱码处理问题总结 #### 一、引言 在进行中文字符处理时,经常会出现乱码问题。这主要是因为不同的系统、程序或组件可能采用不同的编码方式,而这些编码方式之间的转换不当就会导致乱码现象。本文将重点...
CMMI三级认证 编码 PI访谈问题与答案个人总结整理CMMI三级认证 编码 PI访谈问题与答案个人总结整理CMMI三级认证 编码 PI访谈问题与答案个人总结整理CMMI三级认证 编码 PI访谈问题与答案个人总结整理CMMI三级认证 ...
总结来说,导入UTF-8编码文本数据文件至SAS EG出现乱码时,应该首先确认文件的编码类型,并在导入时进行正确设置。如果直接操作仍有问题,则可利用第三方工具辅助处理特殊字符,并在SAS EG导入向导中正确设置。通过...
在IT行业中,尤其是在Web开发领域,JSP(JavaServer Pages)是常见的动态网页技术,而中文乱码问题一直是开发者们经常遇到的困扰。...希望这个总结能帮助到大家,减少在查找和调试这类问题上花费的时间。
JavaScript作为前端开发的核心技术之一,在处理字符编码方面同样会遇到各种各样的乱码问题。本文将详细介绍JavaScript中常见的乱码现象及其解决方案,帮助开发者更好地理解和解决这类问题。 #### 二、JS乱码问题...
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),...