字符集与编码(六)——getBytes方法及乱码初步
在 前一篇 里我们谈了Unicode的代码单元及string.length,现在接着前面的讨论继续谈string.getBytes()方法并对乱码的产生作初步分析。 string.getBytes方法 首先声明一下,以下讨论如无特别说明,均是在Java语言环境下。如果你用的不是java,我只能说声抱歉。但另一方面,我相信无论是何种语言或平台,也必然有类似的方法及类似的处理,而其中的原理也必将是相通的,当然了,具体到细节上则可能会有些差异。 带参数的调用 首先,string.getBytes它可以带参数去调用,这是最简单的情形,如下 @Test public void testGetBytesGbk() throws UnsupportedEncodingException { String str = "hello你好"; assertThat(str.getBytes("GBK").length).isEqualTo(9); } 因为GBK是变长编码,对ASCII字符采用一字节,汉字则是两字节,所以总的长度是1×5+2×2=5+4=9,所以测试是通过的。 注:本文代码均已经上传到开源中国oschina的git.oschina.net上,具体代码见 http://git.oschina.net/goldenshaw/java_code_complete/blob/master