• 编码相关知识


    为什么要编码

    • 计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个。
    • 人类要表示的符号太多,无法用一个字节来完全表示。
    • 要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码。

    常见编码格式

    编码 描述
    ASCII ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。
    ISO-8859-1(扩展ASCII编码) 128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所以应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。
    GB2312 它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
    GBK(扩展GB2312) 全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
    GB18030(兼容GB2312) 全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
    Unicode编码集 ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。Unicode 是 Java 和 XML 的基础。
    UTF-16 UTF-16 具体定义了 Unicode 字符在计算机中存取方法。
    UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。
    UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。
    UTF-8 UTF-16两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。
    而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
    如果一个字节,最高位(第 8 位)为 0,表示这是一个 ASCII 字符(00 - 7F)。可见,所有 ASCII 编码已经是 UTF-8 了。 如果一个字节,以 11 开头,连续的 1 的个数暗示这个字符的字节数,例如:110xxxxx 代表它是双字节 UTF-8 字符的首字节。 如果一个字节,以 10 开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节

    java 默认字符集

    • java采用的编码是unicode编码。java字符串使用的是unicode编码。
    • jvm的默认编码,可以使用System.out.println(Charset.defaultCharset());来查看jvm默认的字符集。JVM的字符集编码取的是操作系统默认的字符集编码。
    • Java文件编译后形成的class文件编码是Unicode编码(具体说是UTF-16编码)。不管在编译前java文件使用何种编码,在编译后成class后,他们都是一样的----Unicode编码表示。

    javac 指定编码

    javac -encoding "文件编码" 源代码.java
    

    参考

  • 相关阅读:
    GNU make manual 翻译( 一百五十)
    [导入]Google开发者日见闻 王开源现身
    [导入]微软中国原高管宫力就任火狐中国总经理
    [导入]QQTalk Beta1 简体中文版
    [导入]《南方都市报》:国产龙芯产业化 难
    [导入][多图]Nokia正式发布奢华8600/6500双子手机
    [导入]用户界面设计的技巧与技术
    [导入]BitComet(比特彗星) 0.89
    [导入]µTorrent 1.7 beta 2248
    今天我注册了
  • 原文地址:https://www.cnblogs.com/devzyh/p/12892350.html
Copyright © 2020-2023  润新知