# 编码概念
计算机存放数据只能存放数字,所有的字符都会被转换为不同的数字。
就像一个棋盘一样,不同的字,处于不同的位置,而不同的位置,有不同的数字编号。
> 有的棋盘很小,只能放数字和英文
> 有的大一点,还能放中文
> 有的“足够”大,能够放下世界人民所使用的所有文字和符号
如图所示,英文字符 A 能够放在所有的棋盘里,而且位置都差不多
中文字符, 中文字符 中 能够放在后两种棋盘里,并且位置不一样,而且在小的那个棋盘里,就放不下中文
![](../images/2481.png)
# Java中常见的编码格式
在计算机系统中,ASCII码是最基础的编码格式,8bit存储一个字节数据,能够表示的字符范围为 255。
由于 ASCII 所变现的字符较少,随后就出现了包括 `ISO-8859-1` 、`GB2312`、`GBK`、`GB18030`、`UTF-16`、`UTF-8` 等编码格式。
目前在应用开发中,使用 UTF-8 的编码方式是最常见的,其次为 GBK。
我们在标识符定义中所说的 unicode 字符集就是指的的 UTF 编码方式。
除了 ASCII 码是用一个字节表示数据的,其他都是 2-4 个字节表示。
在文件字节流中读取的 `byte[]` 数据,最后通过 `new String(byte[], charsetName)` 方法构建的对象,第二个参数就是文件的编码方式。(把一个字节数组转化为字符串,如果不显式的指明字节的编码方式,则用系统默认的编码方式)。
在控制台输入chcp命名可以查询到系统目前使用的文字编码方式 936 表示的是 GBK。
~~~
String rs = new String(data, "GBK");
~~~