您的位置:首页 > 编程语言 > Java开发

java编码格式

2015-08-25 11:06 459 查看
    主要区分清楚内码(internal encoding)和外码(external encoding)就好了。

内码是程序内部使用的字符编码,特别是某种语言实现其char或String类型在内存里用的内部编码;

外码是程序与外部交互时外部使用的字符编码。“外部”相对“内部”而言;不是char或String在内存里用的内部编码的地方都可以认为是“外部”。例如,外部可以是序列化之后的char或String,或者外部的文件、命令行参数之类的。

Java语言规范规定,Java的char类型是UTF-16的code unit,也就是一定是16位(2字节);

然后字符串是UTF-16 code unit的序列:

这样,Java规定了字符的内码要用UTF-16编码。或者至少要让用户无法感知到String内部采用了非UTF-16的编码。

“感知”可以是多方面的,例如随机访问某个下标的code unit(String.charAt())应该是O(1)操作,这只有使用UTF-16或者别的“定长”编码才可以做到。注意我这里说的“定长”特指code unit定长,而不是说code point定长。

String.getBytes()是一个用于将String的内码转换为指定的外码的方法。无参数版使用平台的默认编码作为外码,有参数版使用参数指定的编码作为外码;将String的内容用外码编码好,结果放在一个新byte[]返回。

String a = "我q";
int size = a.getBytes().length;
System.out.println(size);
int len1 = a.getBytes("ISO8859-1").length;
System.out.println("ISO8859-1: "+len1);
int len2 = a.getBytes("GB2312").length;
System.out.println("GB2312: "+len2);
int len = a.getBytes("GBK").length;//输出8
System.out.println("GBK: "+len);
System.out.println("UTF-8:" + a.getBytes("UTF-8").length);
System.out.println("UTF-16:" + a.getBytes("UTF-16").length);
System.out.println("Unicode:" + a.getBytes("Unicode").length);

输出:
6(系统默认)

ISO8859-1: 2

GB2312: 3

GBK: 3

UTF-8:4

UTF-16:6

Unicode:6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: