本次测试还是参考网上的帖子,总结如下:
首先 明确一点: 字节流<------>字符流 的相互转换 ,例如:
String s = "中文";
byte[] bs2 = s.getBytes("utf-8");
String s1 = new String(bs2,"iso-8859-1");
String s2 = new String(bs2,"utf-8");
String s3 = new String(s1.getBytes("iso-8859-1"),"utf-8");
System.out.println(s1+"\n"+s2+"\n"+s3);
输出结果:
??????
中文
中文
以下适合POST 提交以上例子说明 两点:
1、字节流到字符流的 正向和反向 的编码格式要一致,才能正确转换,否则只会得到乱码。2、s1 由 不一致的 编码格式 iso-8859-1 转换成乱码后,可以再次还原为字节流,最后使用一致的编码格式得到正确的中文
好,明白这一点,第一我们首先看 request ,从浏览器到服务器的请求过程,form表单的提交信息需要 经过编码(什么编码??想一想,我们如何知道) 转为字节流,而后(这里讲tomcat)服务器会 逆向把字节流 通过默认编码iso-8859-1来还原为字符流,此时我们使用request.getParameter("XX")得到的东东是正确?还是乱码? 关键问题是:form表单提交时转换字节流时的
编码格式(A) 和 tomcat 把字节流转回字符流的
编码格式(B) 一致吗?
编码格式(B)=“iso-8859-1”
编码格式(A)我们从下面图中找:图示为简体中文(GB2312)
结果乱码。
简单的解决方法:
new String(request.getParameter("XX").getBytes("ISO-8859-1"),"GB2312")//每个参数都要这样做,代码重复
或者
request.setCharacterEncoding("GB2312");
request.getParameter("XX")//至少每个获取参数的地方需要写一次
OK! 问题是解决了,好点的办法:使用过滤器(如何实现?百度就可以)所有的请求都过滤。一次性了事。
待续...
参考作者:
http://hi.baidu.com/smiky/blog/item/7131d71b342688dfac6e756f.html
http://china.manufacturer.com/article/study_for_character_encoding_java.htm
分享:
http://www.iteye.com/topic/640940
分享:
http://sailor90.iteye.com/blog/627514
分享到:
相关推荐
* 是否正确地使用了 request.setCharacterEncoding 和 response.setCharacterEncoding 方法 * 浏览器的编码方式是否正确 字符编码方式的设置是 JSP 中非常重要的一方面,正确地设置字符编码方式可以避免乱码问题的...
jsp编码 jsp乱码解决方案 ...通过设置pageEncoding参数、contentType参数、request.setCharacterEncoding方法和response.setCharacterEncoding方法等,可以解决jsp页面中的乱码问题,提高Web应用程序的用户体验。
我们可以在JSP文件中设置pageEncoding参数,contentType参数,request.setCharacterEncoding方法和response.setCharacterEncoding方法来指定正确的编码。同时,我们也需要了解浏览器是怎么样对接收和发送的数据进行...
在 JSP/Servlet 中主要有四个地方可以设置编码,分别是 pageEncoding、contentType、request.setCharacterEncoding 和 response.setCharacterEncoding。下面我们将详细介绍每一个编码方式的作用和使用场景。 1. ...
具体涉及到了`pageEncoding`, `contentType`, `request.setCharacterEncoding`, `response.setCharacterEncoding`等几个关键概念。 --- ### 正文 在JSP与Servlet的实际开发过程中,中文乱码问题是非常常见的一个...
接着,"html,jsp编码详解_request.setContentType,request.setCharacterEncoding,response.setContentType,resonse.setCharacterEncoding.txt"解释了HTML和JSP中处理乱码的关键API。`request.setContentType()`和`...
// request.setCharacterEncoding("utf-8"); // //接收method属性的值 // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // ...
<%request.setCharacterEncoding("utf-8");%>` 这段代码设置了页面的编码方式为 UTF-8,并将 request 对象的编码方式设置为 UTF-8。 2. 如果使用 Servlet,在 doPost 或 doGet 方法的第一行添加以下代码: `...
1. **调用时机**:应当在读取请求数据(如通过`request.getParameter()`方法获取参数值)之前调用`request.setCharacterEncoding()`方法,否则该设置将不会生效。 ```java protected void doPost...
与`request.setCharacterEncoding`相对应,`response.setCharacterEncoding`用于设定服务器响应数据的编码方式。这一步骤至关重要,因为即使前端页面和后端处理逻辑中的编码设置都正确,如果响应头中的字符集未正确...
1. **统一字符编码**:确保所有相关的编码设置一致,例如JSP页面的`<%@ page pageEncoding="UTF-8" %>`, HTTP请求的`request.setCharacterEncoding("UTF-8")`以及响应数据的`response.setCharacterEncoding("UTF-8")...
② 获取中文属性不出现乱码的方法是,对于post请求,在获取请求参数之前先调用setCharacterEncoding("UTF-8")方法设置字符编码读取。同时,也需要设置Response的字符编码为UTF-8,以确保中文字符正确地显示。 ...
具体做法是在获取参数前调用`request.setCharacterEncoding()`方法,指定字符集为GBK或其他所需编码格式。示例代码如下: ```jsp request.setCharacterEncoding("GBK"); %> <%=request.getParameter("info")%> ``...
- **明确指定编码**:尽量避免依赖默认编码设置,明确指定`response.setCharacterEncoding()` 和`request.setCharacterEncoding()`。 通过理解并合理应用这些编码设置,可以显著提高Web应用的稳定性和用户体验。
GET请求的乱码处理通常在Servlet代码中完成,接收参数前需先设置请求的编码,如`request.setCharacterEncoding("UTF-8")`。 总结来说,解决Servlet中的中文乱码问题,关键在于明确字符编码的设定,确保请求和响应的...
request.setCharacterEncoding(encoding); } } chain.doFilter(request, response); } 其中,selectEncoding 方法可以根据需要选择合适的编码方式。 使用这两种方法可以解决 JSP 中 request 乱码问题,确保...
与POST方式类似,可以在接收数据的JSP页面中使用`request.setCharacterEncoding()`方法进行设置。 **示例代码:** 与上面的POST方式相同,这里不再赘述。 #### 3. JSP → Servlet (POST方式) 从JSP页面向Servlet...
request.setCharacterEncoding("gb2312"); 或者,使用过滤器来解决问题,例如: public class SetCharacterEncodingFilter implements Filter { private String encoding = null; private FilterConfig ...
对于Servlet接收Form/Request传递的参数时显示为乱码的问题,我们可以通过在用到request方法的前面加上:request.setCharacterEncoding("GBK");来解决。 在数据库存取的时候产生乱码的问题,我们可以通过选择UTF-8...
request.setCharacterEncoding("GBK"); response.setCharacterEncoding("GBK"); ``` 然而,这种方法存在局限性,因为它只针对特定的请求处理。为了更全面地解决乱码问题,推荐采用过滤器(Filter)的方式。过滤器...