首页 > 其他分享 >字符集编码

字符集编码

时间:2023-06-14 23:34:18浏览次数:53  
标签:编码 UTF 字节 字符 字符集 Unicode

什么是文本文件和文本编辑器

文本文件

文本文件是纯字符文件,它含有的所有字节必然能够采用某种字符集编码显示出字符,除了BOM字节。

字符集和换行符。

SUMMARY

作者:Keen Kwok
链接:https://www.zhihu.com/question/41426907/answer/90924168
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  1. 字符集就是编码和字符的对应关系,比如说,在 ASCII 编码中,一个'A'字符对应'0x42'。不同的对应关系导致了不同字符集的出现。
  2. 字符编码就是字符在内存中的二进制显示(也可以理解为从理论到实践)。比如,''这个的Unicode对应的字符编码为'0x7231',而使用UTF-8的编码方式,''的字符编码(内存中存储数据格式)为'0xE788B1',UTF-16BE的字符编码为'0x7231'

默认是 ANSI

Windows早期(至少是95年以前的事情了)是ANSI字符集的,也就是说一个中文文本,在Windows简体中文版显示的是中文,到Windows日文版显示的就不知道是什么东西了。

后来,Windows支持了Unicode,但当时大部分软件都是用ANSI编码的,unicode还不流行,怎么办?Windows想了个办法,就是允许一个默认语言编码,就是当遇到一个字符串,不是unicode的时候,就用默认语言编码解释。(在区域和语言选项里可以改默认语言)

这个默认语言,在不同Windows语言版本里是不同的,在简体中文版里,是GBK,在繁体中文版里,是BIG5,在日文版里是JIS

而记事本的ANSI编码,就是这种默认编码,所以,一个中文文本,用ANSI编码保存,在中文版里编码是GBK模式保存的时候,到繁体中文版里,用BIG5读取,就全乱套了。

记事本也不甘心这样,所以它要支持Unicode,但是有一个问题,一段二进制编码,如何确定它是GBK还是BIG5还是UTF-16/UTF-8?记事本的做法是在TXT文件的最前面保存一个标签,如果记事本打开一个TXT,发现这个标签,就说明是unicode。标签叫BOM,如果是0xFF 0xFE,是UTF16LE,如果是0xFE 0xFF则UTF16BE,如果是0xEF 0xBB 0xBF,则是UTF-8。如果没有这三个东西,那么就是ANSI,使用操作系统的默认语言编码来解释。

Unicode的好处就是,不论你的TXT放到什么语言版本的Windows上,都能正常显示。而ANSI编码则不能。(UTF-8的好处是在网络环境下,比较节约流量,毕竟网络里英文的数据还是最多的)

概念区分:字符集和字符集编码

字符集:character set。 囊括某种或某几种文化的符号的集合,并且为这些符号分配一个唯一的数字编号。

字符集编码:character set encoding。把字符集内的每个符号的数字编号,按照某种规则,映射成二进制数值来存储到计算机,二进制数值并不一定要求等于数字编号。 encode & decode

ASCII

ASCII (American Standard Code for Information Interchange)

字符集:阿拉伯数字(0123456789),英文字母(a-z A-Z),英文符号(!@#$*等),控制打印机的字符,以上4种字符组成的字符集合。字符的数字编号范围是0-127.

字符集编码:一个字节,最高位恒0,其他位保持与数字编号相等。如 字符A -> 编号65 -> 编码01000001.

字符集编码和字符集编号的关系:字符集编码和字符集编号相等。

表示范围:0000 0000 - 0111 1111 (0X00 - 0X7F)

ASCII固定占用一个字节,最高位恒0,共计128个字符。33个字符是控制打印机动作的,称为控制字符,95个字符是可打印的,称为可见字符。

显示字符 控制字符
32-126 (阿拉伯数字,英文字母,符号) 0-31 , 127 (控制字符)

部分控制打印机的字符的解释如下:(有些控制字符随着IT发展和设备的进步,已经失去原有的意义或者其作用已经发生改变。)

NUL (0)


NULL,空字符。空字符起初本意可以看作为 NOP(中文意为空操作,就是啥都不做的意思),此位置可以忽略一个字符。

之所以有这个空字符,主要是用于计算机早期的记录信息的纸带,此处留个 NUL 字符,意思是先占这个位置,以待后用,比如你哪天想起来了,在这个位置在放一个别的啥字符之类的。

后来呢,NUL 被用于C语言中,表示字符串的结束,当一个字符串中间出现 NUL 时,就意味着这个是一个字符串的结尾了。这样就方便按照自己需求去定义字符串,多长都行,当然只要你内存放得下,然后最后加一个\0,即空字符,意思是当前字符串到此结束。

BEL (7)


BELl,响铃。在 ASCII 编码中,BEL 是个比较有意思的东西。BEL 用一个可以听得见的声音来吸引人们的注意,既可以用于计算机,也可以用于周边设备(比如打印机)。

注意,BEL 不是声卡或者喇叭发出的声音,而是蜂鸣器发出的声音,主要用于报警,比如硬件出现故障时就会听到这个声音,有的计算机操作系统正常启动也会听到这个声音。蜂鸣器没有直接安装到主板上,而是需要连接到主板上的一种外设,现代很多计算机都不安装蜂鸣器了,即使输出 BEL 也听不到声音,这个时候 BEL 就没有任何作用了。

LF (10)


Line Feed,直译为“给打印机等喂一行”,也就是“换行”的意思。LF 是 ASCII 编码中常被误用的字符之一。

LF 的最原始的含义是,移动打印机的头到下一行。而另外一个 ASCII 字符,CR(Carriage Return)才是将打印机的头移到最左边,即一行的开始(行首)。很多串口协议和 MS-DOS 及 Windows 操作系统,也都是这么实现的。

而C语言和 Unix 操作系统将 LF 的含义重新定义为“新行”,即 LF 和 CR 的组合效果,也就是回车且换行的意思。

从程序的角度出发,C语言和 Unix 对 LF 的定义显得更加自然,而 MS-DOS 的实现更接近于 LF 的本意。

现在人们常将 LF 用做“新行(newline)”的功能,大多数文本编辑软件也都可以处理单个 LF 或者 CR/LF 的组合了。

CR (13)


Carriage return,回车,表示机器的滑动部分(或者底座)返回。

CR 回车的原意是让打印头回到左边界,并没有移动到下一行的意思。随着时间的流逝,后来人们把 CR 的意思弄成了 Enter 键,用于示意输入完毕。

在数据以屏幕显示的情况下,人们按下 Enter 的同时,也希望把光标移动到下一行,因此C语言和 Unix 重新定义了 CR 的含义,将其表示为移动到下一行。当输入 CR 时,系统也常常隐式地将其

DEL (127)


Delete,删除。

有人也许会问,为何 ASCII 编码中其它控制字符的值都很小(即 0~31),而 DEL 的值却很大呢(为 127)?

这是由于这个特殊的字符是为纸带而定义的。在那个年代,绝大多数的纸带都是用7个孔洞去编码数据的。而 127 这个值所对应的二进制值为111 1111(所有 7 个比特位都是1),将 DEL 用在现存的纸带上时,所有的洞就都被穿孔了,就把已经存在的数据都擦除掉了,就起到了删除的作用。

Latin1

扩展的ASCII字符集,又称作 EASCII 和 ISO 8859-1

字符集:ASCII和欧洲字符组成的字符集合。字符的数字编号范围是0-255

字符集编码:一个字节,保持与数字编号相等。如字符 ß->编号223->编码1101 1111

字符集编码和字符集编号的关系:字符集和字符集编号相等。

ASCII只能覆盖英文符号,欧洲国家让最高位可为1,又扩展了128个字符,来存放欧洲国家的语言字符,如丹麦语,德语,法语,瑞典语等。

表示范围:0000 0000 - 1111 1111 (0X00 - 0XFF)。其中 0000 0000 - 0111 1111仍旧是ASCII字符,1000 0000 - 1111 1111表示扩展的欧国国家语言文化字符。

它兼容ASCII字符集。

[EASCII字符表

标签:编码,UTF,字节,字符,字符集,Unicode
From: https://www.cnblogs.com/LiuwayLi/p/17481622.html

相关文章

  • 对抗性自动编码器系列--有监督对抗自动编码器SAAE的原理及实现-随机数生成想要的数字
    文章目录前言监督对抗性自动编码器SAAE风格和内容的分离SAAE训练结果AEAAESAAE实验对比结果恢复效果对比从随机数重建图像的效果这部分实验代码前言先来看看实验:我们使用MNIST手写数字,测试通过自动编码器和对抗性自动编码器学习重建恢复效果。原始图像:自动编码器重建效果......
  • 对抗性自动编码器系列--自动编码器AutoEncoder的原理及实现-手写数字的重建
    文章目录前言自动编码器介绍自动编码器重建手写数字关于损失函数重建结果这部分实验代码前言先来看看实验:我们使用MNIST手写数字,测试通过自动编码器和对抗性自动编码器学习重建恢复效果。原始图像:自动编码器重建效果对抗性自动编码器重建效果虽然这里看到,自动编码器和对抗性自......
  • 互动场景下的低延迟编码技术
    上海交通大学教授宋利在LiveVideoStackCon2020线上峰会的演讲内容整理而成,从分析视频传输系统延迟入手,详细介绍视频编码延迟的产生机制,总结优化编码延迟的技术手段和业界典型的低延迟编码方案,讨论不同场景的延迟要求,并对后续技术演进发展方向进行展望。文/宋利整理/LiveVideoSt......
  • 爱奇艺编码团队:我们让AV1编码速度提升5倍
    爱奇艺综艺《青春有你》编者按:如果说VVC是编码标准中的白富美,那么AV1就代表了广大的互联网玩家——承受不起高昂的专利版税。为了实现免专利费的目标,AV1不得不“舍近求远”的方式躲开已有的专利,这导致其计算复杂度非常高。爱奇艺科学家王志航透露,在同等的画质下,编码速度是开源SVT-A......
  • H264,H265编码概念 压缩方法
    一、什么是H264编码H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,JointVideoTeam)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4AVC或MPEG-4/H.264AVC,Advance......
  • JPEG编码协议--DCT变换
       从之前的几篇文章介绍可以看出,JPEG编码最重要的一步就是DCT变换,将空域的图像信号转换到频域,达到良好的去空间相关性的性能,DCT变换本身是无损的。因此DCT变换在图像编码领域被广泛应用。一、一维DCT变换   在JPEG编码中使用了二维DCT变换,一维DCT是二维的基础,我们......
  • VP9编码:迄今的尝试
    正文字数:2598 阅读时长:8分钟对VP9编码的探索我们从未停歇。文/ 常谦https://blog.hotstar.com/vp9-encoding-journey-so-far-e1153ab488db图片源于Unsplash上TimMosholder拍摄两年前,我们开始在点播内容中使用VP9编码,并且观察到它在视频质量和码率这两方面比H264有明显的提升。......
  • 端到端神经视频编码=A Better Trade-off ?
    归根结底,每一种视频压缩方法都要权衡利弊(trade-off):如果允许更大的文件大小,就可以拥有更好的图像质量;但如果想让文件非常小,那就必须要容忍错误出现的概率。但现在(以及不久的将来),人们希望基于神经网络的方法能够在视频文件大小和质量之间做出更好的权衡与交换(abettertrade-off)。 ......
  • 机器视觉编码技术与标准进展
    正文字数:8411 阅读时长:15分钟整理自中国电信研究院新技术所机器视觉标准与应用研究部主任张园在LiveVideoStack做的线上分享。她详细介绍了VCM、DCM等标准组织机器视觉编码标准化工作最新进展、技术创新思路。文/ 张园整理/LiveVideoStack 各位LVS的小伙伴大家好,非常感谢大......
  • 视频编码器的智能化——AI辅助编解码的ASIC解决方案
    在此次LiveVideoStackCon2021音视频技术大会北京站,来自镕铭半导体的刘迅思详细列举了目前常用的AI辅助编解码的方法,论述如何在硬件和软件层面将AI结合编解码的实践,探索新的标准和新一代编码器结合AI应该如何设计。文|刘迅思整理|LiveVideoStack大家好,我是来自NETINT镕铭半导......