【IO流系列】字符集

文章中的部分照片来源于哔站黑马程序员阿伟老师处,仅用学习,无商用,侵权联系删除!

字符集是一种将字符映射到数字编码的规则集合,用于在计算机中表示和存储文本数据。不同的字符集定义了不同字符与数字编码之间的对应关系,以支持不同语言的文字、符号和特殊字符。

1. 计算机存储规则

计算机存储规则是指计算机系统中用来存储数据的方式和规则。

常见的计算机存储规则包括:

  1. 数据存储单位:计算机中数据存储的最小单位是位(bit),8位组合成一个字节(byte)。常见的存储单位还有千字节(KB)、兆字节(MB)、吉字节(GB)、太字节(TB)等。

  2. 存储层次结构:计算机存储设备按照速度和容量的不同可以划分为不同层次,如寄存器、缓存、内存和硬盘等。

  3. 存储地址:每个存储单元都有一个唯一的地址,通过地址可以访问和存储数据。

  4. 存储访问速度:存储器的访问速度通常按照存取时间(Access Time)来衡量,不同存储设备的存取时间不同。

  5. 存储结构:存储设备有不同的结构,如随机存储器(RAM)、只读存储器(ROM)、磁盘、固态硬盘等。

GB2312字符集:1980年发布,1981年5月1日实施的简体中文汉字编码国家标准。收录7445个图形字符,其中包括6763个简体汉字

BIG5字符集:台湾地区繁体中文标准字符集,共收录13053个中文字,1984年实施。

GBK字符集:2000年3月17日发布,收录21003个汉字。
包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

windows系统默认使用的就是GBK。系统显示:ANSI

在这里插入图片描述

Unicode字符集:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。

2. ASCII字符集

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)字符集是一种使用8位二进制数(前面补0,补齐八位)表示的字符编码标准,定义了从0到127的127个字符,包括控制字符(如换行符、回车符)和可打印字符(如数字、字母、符号等)。

只能存储ASCII码表里面的字符,一个英文占一个字节。

  1. 存储规则:

    • ASCII字符集使用8位二进制数(共128个不同的组合)来表示每个字符。

    • 每个字符都有一个唯一的ASCII码,范围从0到127。

    • ASCII字符集可以存储在计算机的内存中,并且可以被存储在文本文件中。

  2. 编码规则:

    • 将 ASCII 字符表示为8位二进制数(前面补0,补齐八位)。

    • 通过 ASCII 表可以查找到每个字符对应的 ASCII 码。

    • 例如,大写字母"A"对应的 ASCII 码为65(二进制表示为01000001)。

在这里插入图片描述

  1. 解码规则:
    • 将二进制 ASCII 码转换回对应的字符。

    • 将存储在计算机中的 ASCII 码转换为可读文本。

    • 相反地,将字符转换为对应的 ASCII 码。

在这里插入图片描述

3. GBK字符集

GBK(Guo Biao Kuaiji,国家标准信息交换码)是中文编码字符集之一,用于表示中文字符和部分符号。GBK是对汉字进行编码的标准之一,支持简体中文、繁体中文以及一些其他语言的文字。

  1. 存储规则:

    • GBK字符集使用多字节表示汉字和其他特殊字符,通常采用双字节编码。

    • 第一个字节范围为0x81-0xFE,第二个字节范围为0x40-0xFE(剔除0x7F),每个字节的取值范围是0x00-0xFF,其中包含了汉字和其他特殊字符。

  2. 编码规则:

    • 每个中文字符编码为两个字节的形式存储。

    • 高位字节二进制一定以1 开头,转换成十进制之后是一个负数(用于区分是中文还是英文)。

    • GBK编码使用了第一个字节和第二个字节的范围来确定具体的字符。
      在这里插入图片描述

  3. 解码规则:

    • 根据双字节编码应用相应的解码算法,将每两个字节解析为一个字符。

    • 解码时需要考虑字节的顺序和编码范围,以正确还原原始的字符。
      在这里插入图片描述

  4. 对比

    • 计算机的存储规则(汉字)(GBK)

      • 规则1:汉字两个字节存储

      • 规则2:高位字节二进制一定以1开头,转成十进制之后是一个负数

    • 计算机的存储规则(英文)(GBK)

      • 规则:英文一个字节存储,兼容ASCI,二进制前面补0
  5. 核心

    • 核心1:GBK中,一个英文字母一个字节,二进制第一位是0

    • 核心2:GBK中,一个中文汉字两个字节,二进制第一位是1

4. Unicode字符集

Unicode字符集是一种全球通用的字符编码标准,旨在为世界上所有的文字和符号提供唯一的数字编码。Unicode定义了超过130,000个字符,涵盖了几乎所有的书写系统以及许多特殊符号。

  1. 存储规则:

    • Unicode字符集使用不同位数的编码单元来表示字符,常见的编码单元包括UTF-8、UTF-16和UTF-32。

    • UTF-8编码单元长度可变(1至4字节),UTF-16使用16位编码单元(2字节或4字节),UTF-32使用32位编码单元(4字节)。

    • Unicode字符在计算机内存中存储时,会根据所选的编码单元进行存储。

  2. 编码规则:

    • 使用UTF-8、UTF-16或UTF-32等编码格式将Unicode字符转换为相应的编码单元序列。

    • 不同编码格式根据规范来分配不同长度的编码单元,确保将所有Unicode字符编码为二进制数据。

  3. 解码规则:

    • 将存储在计算机中的Unicode编码数据反向解析为字符。

    • 根据所选的编码格式,将编码单元序列解码为原始Unicode字符。

    • 编码和解码过程需要确保编码单元的顺序和长度符合Unicode编码规范,以正确地表示和还原字符。

    4.UTF-8编码方式(二进制)

    • UTF-8编码规则:用1~4个字节保存
      • 英文:1个字节

      • 中文:3个字节

字节个数表示形式
一个字节0xxxxxxx(ASCII码)
两个字节110xxxxx 10xxxxxx
三个字节1110xxxx 10xxxxxx 10xxxxxx
四个字节11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

5. 乱码原因

  • 原因1:读取数据时未读完整个汉字

    • 例如
      在这里插入图片描述
  • 原因2:编码和解码时的方式不统一

    • 例如:UTF-8编码汉字一次读取3个字节;GBK解码汉字一次读取2个字节
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷小洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值