几种常见的编码格式

本文介绍了计算机中信息存储的基本单位及其限制,并详细探讨了ASCII、ISO8859-1、GB2312、GBK、UTF-8及UTF-16等多种编码方式的特点与应用。特别讲解了如何使用UTF-8编码处理中文字符。

编码

  1. 计算机中存储信息的最小单元是一个字节,即8个bit,所以能表示的字符范围是0~255个
  2. 人类要表示的符号太多,无法用一个字节来完全表示
要解决这个矛盾必须要有一个新的数据结构char,从char到byte必须编码。目前常用的编码方式有ASCII、ISO8859-1、GB2312、GBK、UTF-8、UTF-16等

ASCII码

共有128个,用一个字节的低7位表示
  • 0~31 控制字符 如换行、回车、删除
  • 32~126 打印字符

ISO8859-1

在ASCII码的基础上涵盖了大多数西欧语言字符,仍然是单字节编码,它总共能表示256个字符

GB2312

全称为《信息交换用汉字编码字符集基本集》,它是双字节编码,总的编码范围是A1~F7
  • A1~A9 ·符号区
  • B0~F7 汉字区

GBK

全称《汉字内码扩展规范》,扩展了GB2312,加入更多的汉字,它的编码范围是8140~FEFE(去掉XX7F),与GB2312兼容

GB18030

《数字交换用汉字编码字符集》,它可能是单字节、双字节或者四字节编码,与GB2312编码兼容

UTF-16

具体定义了Unicode字符在计算机中的存取方法。采用2字节来表示Unicode转化格式,它是定长的表示方法,不论什么字符都可以用两个字节表示

UTF-8编码规则

UTF-8采用一种变长技术,每个编码区域有不同的字码长度,不同的字符可以由1~6个字节组成。
编码规则如下:
  • 如果一个字节,最高位为0,表示这是一个ASCII字符(00~7F)
  • 如果一个字节,以11开头,连续的1的个数暗示这个字符的字节数
如110xxxxx代表它是双字节UTF-8字符的首字母
  • 如果一个字节,以10开始,表示它不是首字节,需要向前查找才能得到当前字符的首字节
如下:在一个文件中通过UTF-8编码,输入“中国”保存后,通过如下代码读取
File f = new File("F:/study/test/test.txt");
        try {
            FileInputStream input = new FileInputStream(f);
            //BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            int i;
            while((i=input.read())!=-1){
                System.out.println(Integer.toBinaryString(i));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

输出如下结果:
11100100
10111000
10101101
11100101
10011011
10111101
从中可以看出,这两个汉字均占用三个字节存储

字节-字符转变

String a = "中国";
        Charset charset = Charset.forName("UTF-8");
        ByteBuffer byteBuffer = charset.encode(a);
        while(byteBuffer.hasRemaining()){
            byte b = byteBuffer.get();
            String s = Integer.toBinaryString((b & 0xFF) + 0x100).substring(1);
            System.out.println(s);
        }

如上所示,为byte获取其在内存中存储的二进制形式的方法。

### 常见编码格式种类 在计算机科学中,编码格式用于将字符转换为二进制数据以便存储和传输。以下是常见编码格式及其特点: #### 1. ASCII (American Standard Code for Information Interchange) ASCII 是最早的编码标准之一,使用 7 位二进制数表示字符,总共可以表示 128 个字符,包括英文字母、数字和一些控制字符。ASCII 编码适用于英文字符集,但对于其他语言的支持有限[^1]。 #### 2. GB2312 和 GBK GB2312 是中国国家标准编码,扩展了 ASCII 的范围以支持简体中文字符。GBK 是 GB2312 的扩展版本,增加了对繁体中文和其他字符的支持。这些编码主要用于中文环境下的文本处理[^4]。 #### 3. Unicode Unicode 是一种国际编码标准,旨在统一所有语言的字符编码。它为每个字符分配一个唯一的编号,而不考虑具体的存储方式。Unicode 的前 128 个字符与 ASCII 完全兼容[^4]。 #### 4. UTF-8 UTF-8 是 Unicode 的一种实现方式,使用可变长度的字节来表示字符。对于 ASCII 字符,UTF-8 使用单个字节;而对于其他语言的字符,则使用多字节表示。UTF-8 是目前最常用的编码格式之一,因为它能够高效地处理多种语言的文本数据,并且与 ASCII 兼容[^2]。 #### 5. UTF-16 和 UTF-32 UTF-16 和 UTF-32 是 Unicode 的另外两种实现方式。UTF-16 使用 2 或 4 个字节表示字符,而 UTF-32 则始终使用 4 个字节表示每个字符。这两种编码格式在某些特定场景下可能会被使用,但相较于 UTF-8,它们的使用频率较低[^3]。 #### 6. HTML 编码和 CSS 编码 HTML 编码和 CSS 编码是专门用于网页和样式表的编码格式。它们通过实体引用(如 `&` 表示 `&`)或十六进制/十进制数值(如 `\u00A9` 表示版权符号 ©)来表示特殊字符[^2]。 #### 7. JSON 编码 JSON 编码是一种轻量级的数据交换格式,通常使用 UTF-8 编码来表示字符串。JSON 支持转义字符(如 `\n` 表示换行)以及 Unicode 字符的表示(如 `\uXXXX`)。 ### 示例代码 以下是一个简单的 Python 程序,演示如何使用不同的编码格式进行字符串编码和解码: ```python text = "你好,世界!" # 使用 UTF-8 编码 utf8_encoded = text.encode('utf-8') utf8_decoded = utf8_encoded.decode('utf-8') # 使用 GBK 编码 gbk_encoded = text.encode('gbk') gbk_decoded = gbk_encoded.decode('gbk') print(f"原始文本: {text}") print(f"UTF-8 编码: {utf8_encoded}, 解码: {utf8_decoded}") print(f"GBK 编码: {gbk_encoded}, 解码: {gbk_decoded}") ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值