Golang 字符编码、UTF-8、Unicode之间的关系

举报
Linux猿 发表于 2021/10/24 14:03:32 2021/10/24
【摘要】 🎈 作者:Linux猿 🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊! 🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬

🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


本篇文章主要针对 UTT-8 和 Unicode 进行说明,当然还有涉及其它的编码。

一、什么是字符编码?
在正式开始前,先说下什么是字符编码以及字符编码的历史。

字符编码:也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。

简单理解就是以特定模式表示特定字符的表示形式,例如:ASCII码,使用7比特的二进制来表示128个字符,ASCII 码表,实际上就是 map 中 key/value的形式。

 二、字符编码的发展
2.1 ASCII 编码
ASCII 码全程是美国信息交换标准编码(American Standard Code for Information Interchange),最初是作为美国国家标准制定,供不同计算机在相互通信时用作共同遵守的西文字符编码标准,后来它被国际标准化组织(International Organization for Standardization, ISO)定为国际标准,称为ISO 646标准。

ASCII 码通常使用一个字节来存储一个字符,规定字节的第一位为0,后面的7位用于表示字符。

2.2 Unicode 编码
虽然ASCII可以表示西文字符,但世界上还有许多的字符(当然不同的国家会自己的字符编码,但是仅仅表示自己国家的编码)。Unicode便是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode 只是一个符号集,规定了每个符号的二进制编码,但众多的字符数量就会导致,有的字符使用一个字节就可以表示,而有的需要几个字节,至于使用多少字节来存储是Unicode没有规定的。

Unicode 相当于一个行业标准,至于每个企业如何生产并没有规定,所以就出现了UTF-8,UTF-16,UTF-32不同的存储形式。

2.3 UTF-8 编码
UTF-8(8位元,Universal Character Set/Unicode Transformation Format)是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCII相容,使得原来处理ASCII字符的软件无须或只进行少部份修改后,便可继续使用。

UTF-8使用1~4字节为每个字符编码,相比于统一使用4个字节编码大大节省了空间,至于 UTF-8 的编码方式这里就再介绍,有需要的自行学习。

三、Golang 字符编码
Golang 内建支持 UTF-8 编码,支持转化到其它编码,例如:GBK编码,可以使用 golang.org/x/text 包进行转换。

Unicode code points: 可以简单理解为Unicode 用来表示每一个字符的 key,例如:汉字的“字”的十进制使用23383表示,这就是一个编码点。


🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。