编码经常使用字符集

​​​​​​jdk编译

无论在编译前java文件使用何种编码,在编译后成class后,都是用Unicode编码表示。java

jdk在编译的时候,若是没有用-encoding参数指定java源程序的编码格式, 则javac首先得到操做系统默认采用的编码格式(xp是GBK)。而后jdk把java源文件从该编码格式转化为java内部默认的unicode格式放入内存中,随后 javac把转换后的unicode格式的文件进行编译成.class类文件,此时.class文件是unicode编码的,它暂放在内存中。紧接着,jdk将此以unicode编码的编译后的class文件保存到操做系统中造成.class文件。最终得到的.class文件是内容以unicode编码格式保存的类文件,它内部包含源程序中的中文字符串,只不过此时它己经由安装系统编码格式转化为unicode格式了。mysql

ASCII

一个英文字母(不分大小写)占一个字节。sql

一个字节来讲有 8 位;每一位能够表示两种状态,也就是 0 或 1,这样排列组合下来,一个字节就能够表示 256(2∧8) 种不一样的状态。
但并不足以标识全部国家的字符集,因而有了Unicode。编码

Unicode

一个英文占两个字节,一个中文(含繁体)占两个字节;中文标点占两个字节,英文标点占两个字节。
统一都用 Unicode 来表示,那必然须要以占用字节最多的字符长度为标准。但用多个字节表示英文会浪费内存,咱们须要一个可变长度的字符编码规则,当是英文时就用一个字节表示,甚至能够彻底兼容 ASCII 码。 因而有了UTF-8。spa

UTF-8

 一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。 (utf-8的mysql库  VARCHAR2(32) 能支持32个中文, length() 是 96。操作系统

利用两种规则能够表示一个字节以及多字节的字符。code

大体规则以下:blog

  • 当第一个字节的第一位为 0 时便表示为单字节字符,此时和 ASCII 码一致,彻底兼容。
  • 当第一个字节为 1 时,有几个 1 便表明是几个字节 Unicode 字符。

这样即可根据字符的长度最大程度的节省存储空间。内存

固然还有其余的编码规则,好比 UTF-16UTF-32,平时用的很少,但本质上都和 UTF-8 同样,都是 Unicode 的不一样实现,也是用于表示世界上大部分文字的字符集。utf-8

相关文章
相关标签/搜索