java - UTF-16编码问题
本文介绍了java - UTF-16编码问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
String str1="a";
String str2="b";
String str3="c";
String str4="abc";
System.out.println(str1.getBytes("UTF-16").length);//4
System.out.println(str2.getBytes("UTF-16").length);//4
System.out.println(str3.getBytes("UTF-16").length);//4
System.out.println(str4.getBytes("UTF-16").length);//8
System.out.println(str1.getBytes("UTF-8").length);//1
System.out.println(str2.getBytes("UTF-8").length);//1
System.out.println(str3.getBytes("UTF-8").length);//1
System.out.println(str4.getBytes("UTF-8").length);//3
System.out.println(str1.getBytes("UTF-32").length);//4
System.out.println(str2.getBytes("UTF-32").length);//4
System.out.println(str3.getBytes("UTF-32").length);//4
System.out.println(str4.getBytes("UTF-32").length);//12
Unicde编码中不明白的,像UTF-8/UTF-32中str4编码后字节数都是str1+str2+str3,但UTF-16则不然,UTF-16到底是如何编码的呢?求赐教。
解决方案
UTF-16是可变长度的,最少为两个字节的编码格式。因为是两个字节,就牵扯到Big Endian和Small Endian。你上面的例子因为没有指定endianess,所以加上两个字节的BOM。再加上原来字符(ASCII)编码的两个字节,所以是4个字节。如果用utf-16-le或者utf-16-be,就会是两个字节。具体Java如何表示请自查。
这篇关于java - UTF-16编码问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文