02 2010 档案
【Java基础专题】编码与乱码(08)---JavaEE防止中文乱码的设置
摘要: 良好的编程习惯,对编码和数据传输流程的清晰认识,规范的配置是确保JavaEE应用不会出现乱码的三大法宝
阅读全文
posted @
2010-02-24 10:25 Paul Lin 阅读(4308) |
评论 (1) 编辑
【Java基础专题】编码与乱码(07)---native2ascii命令的用法
摘要: 可以看到该命令对于英文字符,数字不会转换而是直接输出,而对于每个中文字符则转换成以\u开头的4个16进制数字。
通常情况下,如果要进行字符的逆转换,-encoding encoding_name这个参数都会配合-reverse出现。在上面的例子中因为本地系统是中文操作系统,所以即便没有指定-encoding也可以正确地从unicode ---》GBK。如果是在英文平台下由于默认字符集是ISO-8859-1,那么这个时候如果不指定则转换出来的将是?了。
阅读全文
posted @
2010-02-23 18:41 Paul Lin 阅读(870) |
评论 (0) 编辑
【Java基础专题】编码与乱码(06)---字符的各种值转换
摘要: 可以看到在Java中,字符的unicode有两种表示显示:一种是10进制形式,一种是16进制形式。它们可以分别通过:int i = (int)(string.charAt(i))和Integer.toHexString(i);获得。而且在java文件和Web页面,同一个unicode的表示形式是不同。web页面需要用进行转义,在java文件中则使用\u进行转义。
阅读全文
posted @
2010-02-23 16:48 Paul Lin 阅读(2120) |
评论 (2) 编辑
【Java基础专题】编码与乱码(05)---GBK与UTF-8之间的转换
摘要: 在这个专题的第一篇文章【Java基础专题】编码与乱码(01)---编码基础 开头,我们就已经介绍了这个规则:
①得到每个字符的2进制GBK编码
②将该16进制的GBK编码转换成2进制的字符串(2个字节)
③分别在字符串的首位插入110,在第9位插入10,在第17位插入10三个字符串,得到3个字节
④将这3个字节分别转换成16进制编码,得到最终的UTF-8编码。
阅读全文
posted @
2010-02-22 23:00 Paul Lin 阅读(36968) |
评论 (11) 编辑
【Java基础专题】编码与乱码(04)---输出时的编码与乱码
摘要: 谨慎地使用getBytes(NAME_OF_CHARSET)和new String(bytes, NAME_OF_CHARSET),除非你很清楚的知道原始的字符编码和传输协议使用的编码。
推荐使用基于服务器的配置、过滤器设置request/response的characterEncoding、content type属性。还有就是JSP页面的pageEncoding属性、HTML meta元素的content type属性。尽量避免频繁的在代码中进行字符串转码,即降低了效率又增加了风险
阅读全文
posted @
2010-02-22 17:39 Paul Lin 阅读(3031) |
评论 (4) 编辑
【Java基础专题】编码与乱码(03)----String的toCharArray()方法
摘要: 这个方法再次证明了String的getBytes()方法的危险性,如果我们使用new String(str.getBytes(), encoding)对字符串进行重新编码解码时,我们一定要清楚str.getBytes()方法返回的字节数组的长度、内容到底是什么,因为在接下来使用新的encoding进行编码解码时,Java并不会自动地对字节数组进行扩展以适应新的encoding。而是按照新的编码方法直接对该字节数组进行解析。
于是结果就像上面的例子一样,同样是4个原始字节,有些每2个一组进行解析,有些每个一组进行解析,有些每3个一组进行解析。其结果就只能看那种编码方式合适了。
阅读全文
posted @
2010-02-22 17:18 Paul Lin 阅读(7081) |
评论 (2) 编辑
【Java基础专题】编码与乱码(02)---String的getBytes([encoding])方法
摘要: 不要轻易地使用或滥用String类的getBytes(encoding)方法,更要尽量避免使用getBytes()方法。因为这个方法是平台依赖的,在平台不可预知的情况下完全可能得到不同的结果。如果一定要进行字节编码,则用户要确保encoding的方法就是当初字符串输入时的encoding。
阅读全文
posted @
2010-02-22 16:53 Paul Lin 阅读(4583) |
评论 (1) 编辑
【Java基础专题】编码与乱码(01)---编码基础
摘要: Unicode到UTF-8的转换:Unicode的16进制编码<-->对应的2进制编码<-->UTF-8规范的2进制编码<-->UTF-8规范的16进制编码
也就是说,假如我们需要从磁盘文件、数据库记录、网络传输一些字符,保存到Java的变量中,要经历由bytes-->encode字符-->Unicode字符的转换(例如new String(bytes, encode));而要把Java变量保存到文件、数据库或者通过网络传输,系统要做一个Unicode字符-->encode字符-->bytes的转换(例如String.getBytes([encode]))
阅读全文
posted @
2010-02-16 23:23 Paul Lin 阅读(3665) |
评论 (3) 编辑