java 编码笔记

1. java内部是以unicode格式存储数据

2. 对于java源码中的字符串,实际存储于硬盘时是根据源码文件设定的编码写入硬盘的,jvm加载源码时,就会使用文件设定编码读取出文件内容转化为unicode后存入内存空间。

3. 对于字符串作getBytes("utf-8"),jvm执行的是返回jvm内存编码unicode转为utf-8(以utf-8 - unicode间的转换规则转换为utf-8编码)后的bytes

4. 对于new String(bytes, "gb2312"),jvm执行的是(以unicode - gb2312的规则解释bytes)转为unicode编码进入jvm内存

5. 对于\u901a格式的字符,jvm加载时会直接以ascii读取后转为unicode,有时候需要在java文件中写一些中文常量,最好用unicode格式的字符串(否则,在将代码传递给其他人使用时,可能由于双方eclipse的文件编码不同使文件转码,导致中文常量不再能够如你所期待的一样运行)

6. eclipse控制台编码,eclipse控制台也存在编码格式,java打印数据到控制台,实际上是将jvm内存中的unicode编码转为控制台编码后将字符符号打印在控制台上。极少数的情况下,控制台中文输出乱码,其实不是输入源(如:http请求带的参数,数据库读取出来的数据,等非java文件带的常量中文)的编码出现问题,可能是控制台编码不支持中文。如,控制台编码是iso-8859-1,而iso-8859-1编码本身不存在中文字符集,所以对于超过一字节的编码值无法转为控制台打印编码。控制台编码是由什么决定的?通常是继承自项目编码,极少数情况下,可能需要使控制台编码与项目编码不同,这需要在运行时进行如下操作:run as -> run configurations... -> common -> encoding 手动指定编码而非inherited(继承)。

猜你喜欢

转载自blog.csdn.net/Vincent_Field/article/details/81867808
今日推荐