【编码格式】UTF-8是什么?Unicode和ANSI又是什么?

大家好!我们在从事编码工作的过程中,总是会涉及到某某字符/某某源代码的编码格式,也知道UTF-8/GBK等等一些常见的编码格式。但是诸位是否有对编码格式有一个全面的、系统的了解呢?今天我就抛砖引玉,一得之见,供众人浅阅。

一、字符编码。

字符编码是一种将字符与数字之间进行转换的方式,通常用于在计算机系统中存储、传输和处理文本数据。字符编码可以将字符映射到唯一的数字值,这个数字值被称为字符的编码值或码位(code point),从而实现了字符的表示和处理。

二、字符编码标准和方式。

字符编码的历史和发展可以追溯到计算机的早期阶段,随着计算机技术的发展和应用需求的变化,字符编码经历了多个阶段和演变过程。在这样的演变过程中,会出现不同的组织制定不同的规范和标准。简单回溯一下历史,最早的ASCII 编码就是由ANSI(美国国家标准协会)制定,然后扩展 ASCII 编码。这是ANSI编码标准和编码方式
随着计算机应用的国际化和多语言支持的需求增加,ASCII 编码和扩展 ASCII 编码的局限性逐渐显现出来,因为它们无法覆盖世界上所有的字符和符号。为了解决这个问题,Unicode 联盟于 1980 年代初期开始制定 Unicode 标准,定义了一个统一的字符集,包括了世界上几乎所有的语言文字和特殊符号,并为每个字符分配了一个唯一的编号(码位)。比如UTF-8/UTF-16/UTF-32等。这就是Unicode编码标准和编码方式。

GBK(GuoBiao-KuoHao,国标扩展)编码是中国国家标准局制定的一种字符编码标准,也称为 GB 2312-1980 的扩展版。GBK 编码在 GB 2312 编码的基础上进行了扩展,增加了更多的汉字和符号,以满足中文信息处理的需求。随着 Unicode 编码的普及和应用,GBK 编码在一些场景中逐渐被取代。

现在被广泛使用的是Unicode编码标准。

三、常见的编码方式。

非Unicode编码的程序和源代码已经非常少见。
现在基本上都使用Unicode编码标准。
Unicode中常见的编码方式就是UTF-8,大部分编程语言也都推荐使用该编码方式。

UTF-8(Unicode Transformation Format-8)是一种可变长度的字符编码方式,它可以表示 Unicode 中的所有字符,使用 1 至 4 个字节来表示不同范围的码位。UTF-8 编码主要用于互联网和操作系统中,它具有良好的兼容性和节省空间的特性。

当然还有UTF-16/UTF-32,但相对于 UTF-8 和 UTF-16,UTF-32 编码会占用更多的存储空间。

四、从一个层次结构中去了解字符的编码。

1.依次打开windows系统的【设置】-【语言】-【管理语言设置】,会看到一个针对非Unicode程序的语言设置项。
这里用于对非Unicode程序,由字符字节转为字符时所制定的语言集。(如果是Unicode程序,则不用指定,因为Unicode编码标准是针对所有字符的,都会有为一个Unicode编码)
在这里插入图片描述
2.使用文本编辑器打开任一二进制文件,然后查看文件内容。如果文件中的文本包含非 ASCII 字符(如中文、日文、韩文等),那么该文件很可能是使用 Unicode 编码的。另外,你也可以查看文件的文件头信息来判断是否是 Unicode 编码。

或者在 Windows 资源管理器中,右键点击程序文件,选择“属性”,然后切换到“详细信息”或“版本”选项卡,有时会显示文件的编码信息。

3.在文本编辑器中打开任一源代码文件,可以通过文本编辑器的编码查看功能,去查看源代码文件的编码格式。比如VSCode编辑器的右下角。
在这里插入图片描述
4.查看程序中的文本处理方式:如果程序中使用了特定的文本处理函数或库,比如 Windows API 中的 CreateFile、ReadFile、WriteFile 等函数,以及标准 C 库中的 fopen、fread、fwrite 等函数,它们通常会有对应的 Unicode 版本(如 CreateFileW、ReadFileW、WriteFileW 等),如果程序中使用了这些 Unicode 版本的函数,则很可能是使用 Unicode 编码的。

这里给了一个从系统-程序-源代码-方法的这样一个层级视角去了解编码的存在形式。

五、延伸。

.NET基于UTF-16编码的,C#、LUA等主流编程语言,推荐使用UTF-8编码。大多数现代编程语言都推荐使用 UTF-8 编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值