Tomcat的中文處理(四):

    技术2022-05-11  64

    转载:注明http://www.csdn.net/develop/article/17/17204.shtm

    Tomcat的中文處理(四)

     

     

    2)在servlet和其他java文件中的字符

    这种情況下,构造String使用的系統默认的编码方式的。

    但是在servletrequest得到的字符,如果沒有指定request的編碼,那么就是得到的一个编码方式为iso-8859-1的字符,在servlet中,如果沒有指定response编码方式(通过setContentType),那么response使用的iso-8859-1编码方式

     

    例子

    import javax.servlet.*;

    import javax.servlet.http.*;

     

     

    public class HelloWorldExample extends HttpServlet {

     

     

        public void doGet(HttpServletRequest request,

                          HttpServletResponse response)

            throws IOException, ServletException

        {

            String name=request.getParameter("name");/得到name參數的value

            response.setContentType("text/html ");///不設置編碼,此時response使用iso-8859-1的編碼

            PrintWriter out = response.getWriter();//得到字符流,此時的編碼為iso-8859-1

     

            out.println("<html>");

            out.println("<head>");

     

    String title="你好";/构造一个String,注意的是虽然此時没有为response指定编码,但是在servlet构造String使用的系统默认的编码的。

            out.println("<title>sdsfdsfsdfds</title>");

            out.println("</head>");

            out.println("<body bgcolor=/"white/">");

            out.println("我们大家<br>");///输出一个编码为本地默认的Stringresponse中,但是此时response的编码是iso-8859-1的,所以出现乱码得

            out.println("title is "+title);title系统默认的编码得到乱码

             out.println("<br>name is "+name);/namerequest的來的,正确显示

            out.println("</body>");

            out.println("</html>");

            System.out.println("你好");由于Console是系統默認編碼,所以正確顯示

            System.out.println("title is "+title);/title是默認編碼的,正常顯示

            System.out.println("name is "+name);///nameiso-8859-1的編碼的,亂碼

        }

    }

    如果我們在response.setContentType("text/html ");改為:response.setContentType("text/html charset=GB2312");那么,IE的输出和Console输出是一样的。

     

    总结:

    1.                      jsp<%@ page contentType="text/html; charset=A" %>如果指定了,那么jsp中所有构造的String(不是引用),如果沒有指定编码那么这些String编码A的。

    request的得到的String如果沒有指定request编码的话,他是iso-8859-1

    从别的地方得到的String是使用原來初始的编码的,比如从数据库得到String,如果数据库的编码B,那么该String编码B而不是A,也不是系统默认的

          此时,如果要输出String编码不是A,那么,很可能显示乱码的,所以首先要String正確转化为编码AString,然后输出

    2.                      jsp<%@ page contentType="text/html; charset=A" %>沒有指定,那么相当于指定了<%@ page contentType="text/html; charset=ISO-8859-1" %>

    3.      Servelte中如果执行了像 response.setContentType("text/html;charset=A");説明response字符输出流编码设置为A,所有要输出的String编码要转化为A的,否則会得到乱码的

           Serveletrequest得到的String编码jsp一样的但是在servlet java文件中构造的String是使用的系统默认的编码的。servelt从外部得到的String 是使用原来的编码的,比如从编码为B数据库得到的数据编码为B,不是A,也不是系统默认的编码

     

     

    后语: 虽然我们使用的tomcat来作说明,其他的jsp,servlet引擎其实现的方法也差不多!


    最新回复(0)