理解文件的编码

 

  • 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项目的文本文件里,不会出现乱码,系统会自动地做编码转换。

原文地址:https://www.cnblogs.com/xingyazhao/p/6007369.html