深入理解“字符编码模型”

本文深入解析字符编码模型,从抽象字符表、编码字符集、字符编码表、字符编码方案到传输编码语法,阐述字符从人类理解到计算机表示的全过程。通过五层模型详细讲解字符编码,帮助读者理解Unicode、UTF-8、UTF-16等概念,解决字符编码中的乱码问题。
摘要由CSDN通过智能技术生成

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

深入理解“字符编码模型”

作者:哲思

时间:2022.8.28

邮箱:zhe__si@163.com

GitHub:zhe-si (哲思) (github.com)

前言

最近踩坑了后端的文档生成,本想写篇相关的实践总结,忽然感悟到电子文档的魅力,尤其以“字符编码模型”为最,特此进行研究并写下此文。

不了解Unicode、UTF-8、UTF-16、GBK,搞不清楚码位、码元等概念,或者经常遇到乱码问题的小伙伴都可以在本文找到答案。

简述字符编码

编码错误示例

相信大家一定对上面的场景不陌生(„ಡωಡ„),这是一个经典的字符编码错误导致的乱码问题。而解决的方法也很简单,在打开文件的时候指定正确的编码方式即可。如图中的文本文件 a.txt 采用 utf-8 编码,指定该编码方式打开并读取文本内容如下图。

字符编码问题1解决方法

解决方案很简单,但方案背后所蕴含的知识可不简单,这就是“字符编码”。众所周知,一个字符类型(char)长度为 1 字节,由多个 char 组成的数组(约定以 \0 结尾)就是字符串。问题来了,一个字节只能表示 28282^8 (256)个数字,如何表示百倍于它的汉字呢?上面用到的 utf-8 又是什么?为什么不指定它就会乱码呢?

想要表示汉字很简单,一个字节不够,那再来个字节呀。用多个字节表示字符,又涉及具体用几个字节、如何高效利用空间、要表示范围足够大同时灵活可拓展等问题,因此提出了以 utf-8 为代表的字符编码的方法来告诉计算机如何解析字节流并将其转化为字符流。由于大部分字符编码的方法不互相兼容,用与编码时不同的编码方案解析它自然就会出错或者解析成错误的内容。

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

概念可能不够具体,狭义来说,字符编码就是将字符(包括英文字母、汉字等)编码为计算机可以存储与解析的字节流形式,同时也支持从字节流解析回字符的形式。这是对现实生活中用到的文字与符号的建模,将它们用一种计算机可以理解的方式表示,来方便计算机处理。

为了标准化字符编码的过程,人们对编码设计的过程进行划分,提出了字符编码的抽象架构模型,共有 5 层,分别解决了字符编码流程中的五个具体细节问题,接下来进行详细介绍。

字符编码模型

设计字符编码,根据先后顺序可以分为以下五个步骤:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

[虚幻私塾】

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

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

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

打赏作者

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

抵扣说明:

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

余额充值