所有的JSP页面的编码都是UTF-8的格式
test1.jsp
<%@ page language="java" import="java.util.*,java.net.*" pageEncoding="UTF-8"%>
  <a href="test2.jsp?str=<%=URLEncoder.encode("中国人","gb2312") %>">链接</a>test2.jsp
<%@ page language="java" import="java.util.*,java.net.*" pageEncoding="UTF-8"%>
 <%
           String name=  URLDecoder.decode(request.getParameter("str"),"gb2312");
             name=new String(name.getBytes("ISO-8859-1"));
     %>
     <%=name %>
谁能告诉下最后这句为什么用ISO的编码能显示出在UTF-8的页面上,具体个编码解码的过程是什么?
我的理解是在test1.jsp中“中国人”是UTF-8的编码,因为我的页面是UTF-8的编码,当点击链接的时候
Web容器又对它进行gb2312编码,通过浏览器传递的时候再次对它进行ISO-8859-1编码,因为是网络传输所以采用ISO-8859-1编码来再次编码,当Web容器找到test2.jsp的页面后,Web容器对test2.jsp进行又进行了gb2312的解码,但是为什么没有进行ISO-8859-1的解码和UTF-8的显示解码呢?现在真的很晕,有哪位大侠能解释下这个整个过程的,小弟感激涕零。j2eeISO-8859-1  编码

解决方案 »

  1.   

    我理解的意思是UTF-8只是文本最初加载的时候用的编码格式。
    以及以后发送的时候用的编码格式。
    读进来的时候不管什么编码,最后都会以UTF-8的编码格式来发送出去。
      

  2.   


    昨天跟你说过了,不是用ISO-8859-1去编码,而是用ISO-8859-1接收请求上来的字符串,因为网络传输数据都是用的ISO-8859-1编码传输的,不管你在前台或后台用什么编码,在传输中都会被转成ISO-8859-1编码。这里是用ISO-8859-1来接收。
      

  3.   

    把jsp想向成一个servlet,在接收到用户请求的时候,tomcat默认用的是iso8859-1解的码,但是servlet要用utf-8对jsp进行编译,然后返回数据显示给用户,用new String(iso8859-1);是为了把编错的编码还原成utf-8的格式,然后再用utf-8方式发送给用户
      

  4.   

          所有的JSP页面的编码都是UTF-8的格式
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
      <a href="test2.jsp?str=<%=URLEncoder.encode("中国人","gb2312") %>">链接</a>test2.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     <%
               String name=  URLDecoder.decode(request.getParameter("str"),"gb2312");
                 name=new String(name.getBytes("ISO-8859-1"));
         %>
         <%=name %>
    方法一中如果把gb2312变成UTF-8的格式,为什么会出现乱码?str=<%=URLEncoder.encode("中国人","UTF-8") %>,页面的编码还保持UTF-8格式。方法二:
    test1.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <a href="test2.jsp?str=<%"中国人"%>">链接</a>
    test2.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
       <%
                String name=request.getParameter("str");
                name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
        %>
        <%=name %>
    谁能给解释下这两个方法的详细过程?
    感觉整个过程好复杂啊,"中国人"的gb2312编码是在什么时候转换的,是在你第一次请求test1.jsp页面就已经转换成了gb2312还是在你点击链接请求test2.jsp的时候再进行的转换呢?如果是在请求test2.jsp的时候才进行转换的,那具体是谁在进行这个转换呢?JVM吗?是按什么编码转换的,是按gb2312的编码转换,还是按ISO-8859-1来进行的转换(因为有人告诉我在网络传递中默认是按照ISO-8859-1来进行转换的,但是现在已经指明是按gb2312进行转的,我理解的是按gb2312进行转换的)?如果是按ISO-8859-1进行转换的那又是在什么时候进行ISO-8859-1进行解码的呢,(这个问题是我不知道如果进行ISO-8859-1的编码转换后还需不需要进行ISO-8859-1的解码了,难道不需要再进行解码了吗?)“中国人”这个参数是在test2.jsp页面处于什么状态下传入进来的呢,应该是在test2.jsp这个页面被转换成.class的时候传入进来的吧?那这个时候的"中国人"是什么编码呢?
    这些都是我的疑问,可能是我想的太复杂了吧。也可能是初生牛犊不怕虎,不知道水有多深,在这瞎想吧。希望有大牛能来解释这些疑问,讲解整个过程。程序我也会写,但是为什么这么写只是大概懵懵懂的感觉是这样,具体为什么这么写不知道。
      

  5.   

    tomcat默认用的是iso8859-1解的码?? 这个解码指的具体是什么呢?