Java的字符表示格式是什么?
JVM的设计者当初决定JVM中所有字符的表示形式时,是不允许使用各种编码方式的字符并存的。
原因:如果内存中的Java字符可以以GB2312、UTF-16、BIG5等各种编码存在,那么对于开发者来说,连最基本的字符串打印,连接等操作都寸步难行。例如:一个GB2312的字符串后面连接一个UTF-8的字符串,那么连接之后的结果是混乱的,无法选择。
Java开发者牢记:在Java中字符只以一种方式存在——Unicode(不选择任何特定的编码,直接使用它们在字符集中的编号,这就是统一的唯一方法)。
但是Unicode在Java中到底指在哪里呢?
是指在JVM中,在内存中,在代码声明的每一个char,String类型的变量中。例如:
char han = '永';
在内存的相应区域中,这个字符就表示0x6c38。
在java中,只要正确读入了这个“永”字,那么它在内存中的表示方式一定是0x6c38,没有其他的值能代表这个字。JVM的这种约定是的一个字符分为两部分:JVM内部和os的文件系统。在JVM内部,统一使用Unicode表示,当这个字符被从JVM内部移到外部(即保存为内部系统中的一个文件的内容时),就进行了编码转换,使用了具体的编码方案。因此可以说,所有的编码转换至发生在边界的地方,JVM和os的交界处,也就是各种输入输出流起作用的地方。