Java中文问题详解


Java 中文问题详解,底层编码解剖 预备知识: 1.字节和 unicode Java 内核是 unicode 的,就连 class 文件也是,但是很多媒体,包括文件/流的保存方式是使用字节流的。 因此 Java 要对这些字节 流经行转化。char 是 unicode 的,而 byte 是字节.Java 中 byte/char 互转的函数在 sun.io 的包中间有。其中 ByteToCharConverter 类 是中调度,可以用来告诉你,你用的 Convertor。其中两个很常用的静态函数是。 public static ByteToCharConverter getDefault() ; public static ByteToCharConverter getConverter(String encoding); 如果你不指定 converter,则系统会自动使用当前的 Encoding,GB 平台上用 GBK,EN 平台上用 8859_1 我们来就一个简单的例子: "你"的 gb 码是:0xC4E3 ,unicode 是 0x4F60 你用: encoding="gb2312"; byte b[]={(byte)'\u00c4',(byte)'\u00E3'}; convertor=ByteToCharConverter.getConverter(encoding); char [] c=converter.convertAll(b); for(int i=0;i0xC4,0x00E3->0xE3,因此 0xC4,0xE3 被放进了文件 1.对于 JSP 正文的解释: Tomcat 首先看一下你的页面中有没有"<%@page include 的符号。有,则在相同地方设定 response.setContentType(..);按照 encoding 的来读,没有他按照 8859_1 读取文件,然后用 UTF-8 写成.java 文件,然后用 sun.tools.Main 去读取这个文件,(当然它使用 UTF-8 去读),然后编译成 class 文件 setContentType 改变的是 out 的属性,out 变量缺省的 encoding 是 8859_1 2.对 Parameter 的解释 很不幸 Parameter 只有 ISO8859_1 的解释,这个质料可以在 servlet 的实现代码中找到。 3.对 include 的解释 格式的,但是很不幸,由于那个写"org.apache.jasper.compiler.Parser"的人 在数组 JspUtil.ValidAttribute[]忘记加了一个参数:encoding,因此导致不支 持这种方式。你完全可以编译源代码,加上对 encoding 的支持 总结: 如果你在 NT 底下,最简单的方法就是欺骗 java,不加任何 Encoding 变量: 你好<%=request.getParameter("value")%> http://localhost/test/test.jsp?value=你 结果:你好你 但这种方法局限性较大,比如对上传的文章分段,这样的做法是死定的,最好的 解决方案是用这种方案: <%@ page contentType="text/html;charset=gb2312" %> 你好<%=new String(request.getParameter("value").getBytes("8859_1"),"gb2312")%>
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

灰尘之都

贡献于2010-09-14

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf