Web应用中的请求编码与国际化自定义操作
1. 请求编码问题
在Web应用中,如果HTML表单的数据使用非默认字符集(ISO - 8859 - 1)进行编码,当这些数据作为请求参数被访问时,很可能无法正确解码。这是因为大多数浏览器不能正确处理Content - Type请求头。
HTTP规范定义了Content - Type请求头,浏览器可以用它来指定请求编码,但大多数浏览器从不设置这个请求头。因此,作为表单动作的页面会假设表单的请求参数是用默认字符集(ISO - 8859 - 1)编码的,并尝试用该编码解码请求参数。如果请求参数使用的是其他字符集编码,那么表单动作就无法正确解码这些参数。
下面通过一个示例来说明,有一个针对中文本地化的Web应用,包含两个JSP页面:
-index.jsp:包含一个简单的表单,用于询问用户的姓名。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Broken Request Decoding</title> </head> <body> <%@ taglib uri='http://java.sun.com/jstl/core' prefix='c'%> <%@ taglib uri='h