理解文件的编码
- UTF-16BE:汉字占 2 个字节, 字母占 2 个字节。
- UTF-8:汉字占 3 个字节, 字母占 1 个字节。
- GBK:汉字占 2 个字节,字母占 1 一个字节。Java项目默认编码为GBK。
- ANSI:中文系统下ansi编码代表GBK编码。
Java是双字节编码,一个字符占2个字节。所以Java里的一个字符可以放一个汉字,默认的Java项目编码为GBK,一个汉字2个字节,正好可以放进去,不会出现乱码。
当你的 字节序列 为某种编码时,这个时候如果想把字节序列编变成字符串,也要用到这种编码方式,否则会出现乱码。
在程序中,将 字节序列 变成 字符串,如果不给出字节序列的编码方式,则会采用系统默认的编码方式GBK,例如,bytes是一个UTF-8的字节序列数组,如果要将其转换成这个字节序列所表示的字符串,则必须给出这种编码方式:
String str = new String(bytes,”utf-8”);
如果不给出则会按照GBK编码方式转换成字符串,就会出现乱码。
文本文件其实是一种字节序列。
在文本文件可以查看任意编码的文字信息而不乱码。
在中文机器上直接创建文本文件,那么文本文件默认以ansi编码(也就是GBK)来保存文字信息。
在Eclipse里面,项目设置的什么编码形式,它就只认识什么编码。如果从一个utf-8的项目里拷贝一个文本文件到GBK的项目里,再打开则会出现乱码。但是如果从utf-8的文本文件里直接拷贝文字内容到GBK项目的文本文件里,不会出现乱码,系统会自动地做编码转换。