[code="java"]String str = "爱我中华";
Charset cset = Charset.forName("UTF-8");
ByteBuffer bb = cset.encode(str);
byte[] bytes = bb.array();
System.out.println(bytes.length);[/code]
[size=large]
为什么上面的代码最后输出的结果显示bytes数组的长度为19.按照UTF-8的转换定义,每个汉字应该被转换成三个字节呀,纠结中,求解答[/size]
- UTF-8使用1至6个字节为每个字符编码 [url]http://baike.baidu.com/view/25412.htm[/url] 不过这里的每个汉字的确是使用3个字节编码的: 爱:-25,-120,-79 我:-26,-120,-111 中:-28,-72,-83 华:-27,-115,-114
- bb.array() 返回的是缓冲区的底层实现数组,并不仅仅是编码后的字节,末尾有多个0;
- 获取编码后字节数组的正确方式 int length = bb.limit(); byte[] bytes = new byte[length]; bb.get(bytes);