字符集编码全方位解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 字符集编码全方位解析

是时候了解关于字符集编码了!!!


ASCII#


最早计算机刚出世时,只有一ASCII编码方式, American Strand Code For Information Interchange , ASCII 使用7位 标识一个字符, 对于只认识 0 1 的计算机来说, ASCII 可以记录 2^7 个字符, 针对欧美国家来说, abc... 再加上一些运算符号 ,ASCII足够用了

但是问题来了,不光是美国,像法国等国家也普及计算机,很快ASCII就不够了


ISO-8859-1#


于是 ISO-8859 出现了, 它使用8 位 表示一个字符, 而且完全兼容ASCII编码表

ISO-8859-1相对于ASCII有两个优点:

  • ISO-8859-1 可以表示 2^8个字符, 对ASCII
  • ISO-8859-1 使用8位表示一个字符, 这使得他可以完全使用每个字节的每一位

然后这还是仅仅对西欧国家而言, 后来计算机普及到了亚洲


gb2312#


对我们国家来说,我们同样需要一种编码表,让计算机认识我们的汉字,于是 中华人民共和国 指定了gb2312 , 国标2312 , 它使用两个字节表示一个汉字, 容纳了几千个常用的汉字

但是问题并没有打住,gb2312 并没有包含极少数的生僻字


gbk#


gbk编码表弥补了 gb2312并不包含极少数的生僻字的现状

然而,gbk依然不能表示全部的中国文字

于是:


gb18030#


gb18030 的扩展,使他成为了最完整的汉字的编码集

但是, 这却仅仅是对大陆而言


Big5#


我们的宝岛台湾仍然使用 繁体字, 他们的编码表是 big5

随着计算机的全球化,于是国际标准化组织出现了,他们想统一世界上的编码方式


unicode#


国际标准化组织对全世界的编码方式进行了汇总, unicode 理论上是可以表示世界上全部的符号的, 它统一使用两个字节表示一个字符, 算算看,他可以表示 256^256个字符

现在unnicode的出现,不再担心不能表示全所有的字符了,但是问题又来了,对于原来的欧美国家来说, 本来一个ISO-8859-1 就够他们使用的,结果来个unicode, 缓存容量急剧上升,这是个不好的事情, 于是主角来了


UTF(Unicode translation format)#


UTF 有三个分支, UTF-8 UTF-16 UTF-32;

其中UTF-8 使用的变长的字节表示 , 也就是说,假如是当前的字符是a, 它会使用一个字节表示, 假如是汉字,他使用三个字节表示 .

UTF-16 和 unicode 一样的都是使用两个字节

UTF和Unicode的关系 Unicode是一种编码方式,而utf是一种存储格式

比如说我们的文件是utf-8这种存储格式的, 即传进去的数据都是用utf-8


磁盘上文件都是有自己的存储格式的, 比如常用的文本文件的存储格式都是utf-8

如下图:我们想实现 数据从源文件拷贝到目标文件

{% asset_img 1.jpg image %}

假如源文件的存储方式是utf-8, 但是我们使用ISO-8859-1对它进行解码, ISO-8859-1碰到一个字节就认为他是一个字符,这显然和utf-8的动态编码相冲突, 因此我们解码得到的结果无异于全是乱码

紧接着,我们使用ISO-8859-1对得到的乱码,进行编码,同样对于ISO-8859-1来说,他是认识这些乱码的,而且ISO-8859-1并没有和utf-8一样充分了利用了每一个字节的每一位,于是它把他们按位编码会数据原始的状态

在然后,我们把编码后的数据写到 用uft-8存储的目标文件,对于目标文件来说,得到的数据就是源文件中编码形态 故不会出现乱码


如果我们想用 utf-16类型的编码器,对 utf-8类型的文件进行编解码呢?

结果要么会报错,要么就行出异常MalformedInputException 一个难看的参数

试想,如果utf-8存储格式的文件中, 只有一个数据 1, 他就是1字节, 而utf-16默认是两个字节, 编码后的结果也全部是FEFF0031这样的, 对于utf-16来说,他是无法对1进行解码的,直接会报错


源文件和目标文件的 存储格式也要相同,这决定了他们对数据字节的划分不同,得到的结果自然不同

相关文章
|
6月前
|
机器学习/深度学习 前端开发 Windows
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
【夯实技术基本功】「底层技术原理体系」全方位带你认识和透彻领悟正则表达式(Regular Expression)的开发手册(正则符号深入解析 )
77 0
|
24天前
|
算法 量子技术
|
30天前
|
机器学习/深度学习 人工智能 自然语言处理
前端大模型入门(三):编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入
本文介绍了大规模语言模型(LLM)中的两个核心概念:Tokenizer和Embedding。Tokenizer将文本转换为模型可处理的数字ID,而Embedding则将这些ID转化为能捕捉语义关系的稠密向量。文章通过具体示例和代码展示了两者的实现方法,帮助读者理解其基本原理和应用场景。
179 1
|
5月前
|
JavaScript 前端开发 搜索推荐
CSR、SSR与同构渲染全方位解析
CSR、SSR与同构渲染全方位解析
91 0
|
1月前
|
机器学习/深度学习 人工智能
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
|
4月前
|
SQL 安全 网络安全
网络安全与信息安全:从漏洞到防护的全方位解析
【7月更文挑战第14天】在数字时代的浪潮中,网络安全与信息安全成为维护社会稳定和保护个人隐私的关键。本文深入探讨了网络环境中常见的安全漏洞、先进的加密技术以及提升安全意识的有效策略。通过分析最新的网络攻击案例和防御手段,旨在为读者提供一套实用的网络安全知识体系,帮助公众和企业构建更为坚固的信息安全防线。
|
4月前
|
前端开发 JavaScript NoSQL
"从零到一:全方位解析现代Web开发技术栈
【7月更文挑战第9天】在当今快速发展的互联网时代,Web开发技术日新月异,为开发者提供了前所未有的创新空间。本文将从基础到高级,全面解析现代Web开发技术栈,帮助初学者或希望升级技能树的开发者构建稳固的知识体系。我们将探讨前端、后端以及全栈开发的关键技术,并通过一个简单的项目示例来演示这些技术的实际应用。
431 1
|
5月前
|
存储 缓存 负载均衡
elasticsearch写入流程和请求检索流程原理全方位解析
elasticsearch写入流程和请求检索流程原理全方位解析
|
4月前
|
文字识别 Java Python
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
文本,文识08图片保存()上,最方便在于整体生成代码,serivce及实体类,base64编码保存图片文件,调用flask实现内部ocr接口,通过paddleocr识别,解析结果,base64转图片
|
4月前
|
安全 算法 网络安全
网络安全与信息安全:从漏洞到防御的全方位解析
在数字化时代,网络安全和信息安全的重要性日益凸显。本文将从网络安全漏洞、加密技术、安全意识等方面进行全面的知识分享,旨在帮助读者更好地理解网络安全和信息安全的重要性,并掌握相应的防护措施。
55 0

推荐镜像

更多