[C语言基础]1.字符集、字符编码与字节序

本文详细介绍了字符集与字符编码的概念,包括ASCII、GB 2312、GBK、Unicode以及UTF-8的特性与应用。字符集如ASCII收录128个字符,GB 2312和GBK则收录大量汉字。Unicode作为通用字符编码,包含世界所有书写系统的字符。UTF-8是变长编码,广泛用于网络和软件,而UTF-16则存在字节序问题,通常使用BOM标记。
  1. 字符(Character):文字与符号的总称
  2. 编码(Encode):将字符转换为对应的二进制序列的过程
  3. 解码(Decode):将二进制序列转换为对应的字符的过程
  4. 字符集(Character Set / Charset):定义了字符与二进制的对应关系,为字符分配了唯一的编号
  5. 字符编码(Character Encoding):规定了如何将字符集存储到计算机中,常用的有单字节字符编码、ANSI编码和UNICODE编码
  6. 字节序(Endianness / Endian):计算机存放多字节数据的字节的顺序,分为大端字节序小端字节序
  7. 大端字节序(Big Endian):把一个字符的低位字节序的内容存放到高地址处,高位字节序的内容存放在低地址处
  8. 小端字节序(Little Endian):把一个字符的低位字节序的内容存放到低地址处,高位字节序的内容存放在高地址处
    编码和解码
    大端字节序与小端字节序

字符集/字符编码 之 ASCII

  1. ASCII即American Standard Code for Information Interchange,美国信息交换标准代码
  2. ASCII是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。

拉丁字母也叫罗马字母,它源自希腊字母,是当今世界上使用最广的字母系统。基本的拉丁字母就是我们经常见到的ABCD等26个英文字母。拉丁字母与阿拉伯字母和斯拉夫字母(西里尔字母)一起被称为世界三大字母体系。

  1. ASCII 使用指定的7或8位二进制数的组合来表示128或256种可能的字符。
  2. ASCII 编码中第 0~31 个字符(开头的 32 个字符)以及第 127 个字符(最后一个字符)都是不可见的(无法显示),但是它们都具有一些特殊功能,所以称为控制字符( Control Character)或者功能码(Function Code)。

这 33 个控制字符大都与通信、数据存储以及老式设备有关,有些在现代电脑中的含义已经改变了。

ASCII Table

字符集/字符编码 之 GB 2312

  1. GB 2312是中华人民共和国国家标准汉字信息交换用编码,全称《信息交换用汉字编码字符集·基本集》,标准号为GB 2312-80(GB 是“国标”二字的汉语拼音缩写)。
  2. GB 2312-80收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共 7445 个图形字符。其中汉字以外的图形字符 682 个,汉字 6763 个。
  3. GB 2312-80 规定,“对任意一个图形字符都采用两个字节(Byte)表示。每个字节均采用 GB 1988-80 及 GB 2311-80 中的七位编码表示。两个字节中前面的字节为第一字节,后面的字节为第二字节。习惯上称第一字节为“高字节”,第二字节为“低字节”。

字符集/字符编码 之 GBK

  1. GBK即《汉字内码扩展规范》(GB即“国标”、K即“扩展”),英文名称:Chinese Internal Code Specification。
  2. GBK是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。

ISO 10646 是国际标准化组织 ISO 公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(UCS,《通用多八位编码字符集》),它与 Unicode 组织的 Unicode 编码完全兼容。

字符集 之 Unicode

  1. Unicode即Universal Multiple-Octet Coded Character Set / Unicode Character Set(UCS)

历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2019年5月7日发布的Unicode 12.1。ISO的最新标准是ISO/IEC CD 10646(正在开发中,进度截至20190802)。
Unicode协会 - The Unicode Consortium
国际标准化组织ISO - The International Organization for Standardization

  1. Unicode是通用字符编码。该编码标准为所有现代软件和信息技术协议中的任何语言的文本数据的处理,存储和交换提供了基础。

Unicode is the universal character encoding.This encoding standard provides the basis for processing, storage and interchange of text data in any language in all modern software and information technology protocols.

  1. Unicode涵盖了世界上所有书写系统的所有字符,现代和古代。它还包括技术符号,标点符号以及用于编写文本的许多其他字符

Unicode covers all the characters for all the writing systems of the world, modern and ancient. It also includes technical symbols, punctuations, and many other characters used in writing text.

  1. Unicode只是一个字符集,在制定的时候并没有考虑编码的问题。
  2. Unicode可以使用的字符编码有三种,分别是:
    UFT-8:一种变长的字符编码方案,使用 1~6 个字节来存储;
    UFT-32:一种固定长度的字符编码方案,不管字符编号大小,始终使用 4 个字节来存储;
    UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。

字符编码 之 UTF-8

  1. UTF-8(8-bit Unicode Transformation Format)使用1到4个字节编码Unicode字符,由Ken Thompson于1992年创建,现在已经标准化为RFC 3629。

UTF即UCS Transformation Format

  1. UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
  2. UTF-8以8位(即一个字节)为编码单元,没有字节序的问题。

字符编码 之 UTF-16

  1. UTF-16以16位(即两个字节)为编码单元,所以存在多个字节的顺序问题(即字节序)。
  2. Unicode规范中推荐以BOM(Byte Order Mark,字节顺序标记)标记字节序。

为了识别 Unicode 文件,Microsoft 建议所有的 Unicode 文件应该以 ZERO WIDTH NOBREAK SPACE(零宽无间断间隔,U+FEFF)字符开头,以识别文件中使用的编码和字节顺序。Linux/UNIX 并没有使用 BOM,因为它会破坏现有的 ASCII 文件的语法约定。

参考文章:
理清字符集和字符编码关系
编码集—解码和编码
ASCII编码,将英文存储到计算机
字符,字节和编码
C语言之大小端详解
中文字符集gbk和gb2312有何异同?是一样的吗?
谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
FAQ - Unicode
Unicode 与 Unicode Transformation Format(UTF-8 / UTF-16 / UTF-32)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值