Tomcat中文处理(三)

 

现在我们来分析几个例子:

 

1) jsp中如果使用了:

<%@ page contentType="text/html; charset=Shift_JIS" %>

其实就是 指定了 response 类型和字符的编码方式,上面指定了 response 字符编码是 Shift_JIS


jsp 构造 String 的时候,如果没有明确指定 String 编码 String 使用的 编码就是 charset 指定的 如果 charset 沒有指定 字符的编码的话 那么 話,就使用 ISO-8859 - 1

注意的是如果沒有指定 requset 编码 那么从 request 得到的 String 都是 iso-8859-1 编码的 ( 上一篇 已经讲过了 ) ,他和 charset 是没有关系的。

如果 要输出的 String 编码 response 编码不一样的话 ,就很可能出 现乱码 的情況。

举个例子

<%@ page contentType="text/html; charset= GB2312 " %> /// 指定 response 编码为中文简体 ,那 所有的 要输出的字符都要使用和 GB2312 相适应的编码

<html>

<head><title></title>

</head>

<body>

<%

String name=request.getParameter("name"); 得到 客户端 的參數 ,沒有指定 request 编码 ,所以它是 编码为 iso-8859-1 String 的。

String name1=new String(name.getBytes("ISO-8859-1")," GB2312 ") ;// 转化为中文简体的编码

String name2=" 你好 "; / 直接定義 String, 使用 reponse 编码 这里是 GB2312 的。

String name21=new String(name2.getBytes("ISO-8859-1")," GB2312 "); name2 转化

System.out.println("name1 is GB2312 "+name1);

System.out.println("name is ISO-8859-1"+name);

System.out.println("name21 is 直接 "+name21);

System.out.println(" 我们大家 ");

%>

<form action="./B.jsp" method="POST">

<input type="text" name="name" value="<%=name1%>">

<input type="submit">

</form>

<hr>

name1 is GB2312   <%=name1%><br>

 

name is ISO-8859-1     <%=name%><br>

 

name2 1 is 直接 <%=name21%><br>

 

<%=" 我们大家 "%></body>

</html>

結果:

console 中: ( 对应 response 编码是 GB2312 的,日文系統 MS932 )

name1 is GB2312  你好 //name1 name 转化来 的,是 GB2312 的,所以正常顯示

name is ISO-8859-1???? /name ISO-8859-1 的不能正常顯示的

name21 is 直接 ??????????????????? 由於 name2 GB2312 編碼的 , name21 =new String(name2.getBytes(" ISO-8859-1 "),"GB2312")) 發生了錯誤的轉化,所以不能正常的現實,如果將 ISO-8859-1 換為 GB2312 就可以了。

我们大家 //jsp 中定義的 string 是採用 <%@ page contentType="text/html; charset= GB2312 " %> 指定的編碼,如果沒有指定,就使用 iso-8859-1 的。

   可以看到我們在 ie 中看到的結果是一樣的。

下面我們將 <%@ page contentType="text/html; charset=Shift_JIS" %> 去掉。

結果:

console ( 这个时候 Console 的編碼是 GB2312 , 所以 编码为 GB2312 的字符能显示 由于 jsp 构造的 String 此時使用的 iso-8859-1, 所以不能 显示 )

name1 is GB2312 你好

name is ISO-8859-1????

name2 1 is ???? 你好 /name2 的编码此时为 iso-8859-1, 所以转化来的 name21 是正确的

????????

ie  ( 这个时候 response 编码 iso-8859-1, 所以 编码为 iso-8859-1 的能 显示 由于在 jsp 构造 String 此時使用的 iso-8859-1, 所以也能 显示 )

name1 is GB2312 ??

name is ISO-8859-1 你好

name2 1 is 直接 ???????????????????

我们大家

 

顯然不一樣了結果!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值