0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

计算机编码全解析(上)

jf_78858299 来源:小余的自习室 作者:小余的自习室 2023-03-30 10:28 次阅读

前言

你是不是工作了很多年了,一直没搞清楚计算机中的各种编码规则,虽然平时都会使用,但是内部机制原理一直都是之其然而不知其所以然,开发中也会经常涉及到这块内容,但都没有太多重视,这可能会让有吃一些亏(出项目bug了),本着追本溯源的精神或是为了让自己在少出血bug,小余今天就来聊聊这块内容。

目录

1.字符集与字符编码

首先要明确两概念, 字符集 (charset)和 字符编码 (encoding)。

字符集

字符集顾名思义: 很多字符的集合 。这些字符组成一套字符系统,用来表达我们生活中各种含义,

比如0~9以及各种加减法等符号的集合,可以表示生活中的“数字集合”,不然1+1是什么计算机可不知道? 26个大小写英文字母加上标点符号就组成了“英文字符集“,这些字符集在英美人看来就组成了一套符号系统,看到”I Love you“就知道什么意思了。 再比如我们新华字典中的所有汉字加上标点符号就组成了“中文字符集”,这个字符集就组成了中文文字系统。看到“我爱你”也就知道什么意思了,可以对于不懂中文的老外来,因为没有中文字符集,看到“我爱你”可就一脸懵逼了。

字符编码

字符编码 :言外之意就是 对字符进行编码 ,那为什么要对字符编码,其实字符编码最终目的就是为了存储或者传输。我们的计算机最早是用来提供算术功能的,和算盘功能类似,但是后来发现计算机可以做很多事情。 其中就包括存储机制,如何存储呢?假设“LOVE”这个单词,我们使用数字1代表L,数字2代表O,数字3代表V,数字4代表E,将1234存储在某个区域,这样就可以知道这4个数字代表了“LOVE”,当然实际LOVE有自己的字符表示,这里使用1234作为例讲解。

字符编码的四个步骤

要在计算机中建立一个“字符编码模型”,需要四个步骤:

  • 1.要有一个 字符库 ,确定这些字符库足够表意。比如ASCII字符集,已经足够表示英文系统,但是不能表达中文,于是有了GB2312字符集。
    1. 第一层编码 :给每个字符选个数字(Code Point),比如ASCII码中,用65表示“A”,97表示“a”。
    1. 第二层编码 :确定表示字符的二进制位数(8位,16位,32位)。ASCII码使用7位来表示,因为当时制定者觉得7位以及够用了,DBCS(双字节字符集)使用了16位。
  • 4.第三层编码: 确定字符的二进制存储方式(大端还是小端)。比如X86机器使用小端。

一个字符一般只有一种编码格式,当字符集中的字符不够用时,会增加一些新的字符,使用新的字符编码格式,形成新的字符集。所以 有时候字符集和字符编码的概念是很模糊的,并不严格区分 。比如ASCII码既可以成为一段“字符集”,也可以称为一种“编码格式”。

也有一些字符集有多种编码格式:如Unicode,其中UTF-8和UTF-16等都是其编码格式,这个后面是详细讲解。

2.常用计算机编码

1.ASCII码

ASCII码全称“American Standard Code for Information Interchange”, 美国标准信息交互码 ,由美国标准委员会(American Standards Association,简称ASA)制定,后来该协会改组为“美国国家标准学会”(American National Standard Institute , 简称ANSI ),所以很多资料上说ASCII码是由ANSI指定的。

ASCII码是从电报码发展过来的,最早使用在7-bits电传打印机上。1960年,ASA将ASCII标准化,于1963年发布第一版,1967年再发布一次大的版本,这个标准版本,也是一个7-bit码,包含33个非打印字符(现在许多已经废弃了),95个打印字符(包含空格符),编码范围为0~127。

图片

然而ASCII码只是美国的标准,对于其他国家,如中文,日文,韩文等大多使用的是象形文字,127个字符远远无法表达中国的汉字文化,于是各国在ASCII的基础上制定了自己的字符集,但是 本质上都兼容ASCII ,如中国大陆的GK2312,台湾省的(Big5)小日子的JIS等编码规范。

2.EASCII

其实标准的ASCII就是7-bit的编码(8字节,但是最高位没有编码),后来使用过程中发现127个字符有点不够用,于是将ASCII进行了扩展,叫做EASCII或者high-ASCII,8位的,能表示256个字符。

由于不同的应用场景,有不同的编码,有IBM的Extend ASCII和ANSI的Extend ASCII。 去wikipedia上会发现有好多种ASCII的标准,大类就是IBM和ANSI(Windows的,微软很强势,ANSI的东西感觉就是给他们家用的)两种,其实都是为了给自家系统用的,随着IBM操作系统的坠落,IBM的扩展ASCII也根本上淡出视野。

扩展的ASCII的产生

搭载Windows系统的计算机进入欧洲之后,发现标准的ASCII并不能满足欧洲这些拉丁语族国家的语言表意,决定对其进行扩展。同为印欧语系,发现扩展起来也没那么难,总共256个值就包括所有了。只需要将原来的7-bit扩展为8-bit,将原来的标准ASCII保留,第一位使用0来表示。将扩展的字符第一位使用1来表示

扩展ASCII的组成

具体来讲,扩展后的ASCII码表可以看成 由三部分组成

  • 第一部分 :由00H到1FH共32个,一般用来通讯或作为控制之用。有些可以显示在屏幕上,有些则不能显示,但能看到其效果(如换行、退格)
  • 第二部分 :是由20H到7FH共96个,这95个字符是用来表示阿拉伯数字、英文字母大小写和下划线、括号等符号,都可以显示在屏幕上.
  • 第三部分 :由80H到0FFH共128个字符,一般称为"扩充字符",这128个扩充字符是由IBM制定的,并非标准的ASCII码.这些字符是用来表示框线、音标和其它欧洲非英语系的字母。

图片

3.ISO-8859

由于每个国家以及公司对编码的各自定制化,导致 同一个字符在不同电脑之间由于编码的不一致,显示的结果也不一样,现象就是乱码 。 那为了解决这个问题,ISO组织统一了一套标准的字符集。

与ASCII、EASCII字符编码方案只包括单个独立的字符集不同,ISO/IEC 8859字符编码方案包括了一组字符集, 或者说ISO/IEC 8859相当于是一组字符集的总称,其内共包含了15个字符集, 即ISO/IEC 8859-n,n=1、2、3…15、16,其中12未定义,所以实际上共15个。

这15个字符集,大致上包括了欧洲各国所使用到的字符(甚至还包括一些外来语字符),而且每一个字符集的补充扩展部分(即除了兼容ASCII字符之外的部分),都只实际使用了0xA00xFF(十进制为160255)这96个编码,而0x800x9F(十进制为128159)这32个编码并未实际定义字符。

其中,目前使用得最为普遍的是ISO/IEC 8859-1字符集,收录了西欧常用字符(包括德法两国的字母)。

ISO/IEC 8859-1往往简称为ISO 8859-1,而且还有一个称之为Latin-1(也写作Latin1)的别名,即:ISO/IEC 8859-1 = ISO 8859-1 = Latin-1 = Latin1。

图片

从ISO 8859-1到ISO 8859-16各自所收录的字符分别如下:

ISO/IEC 8859-1 (Latin-1) - 西欧语言
ISO/IEC 8859-2 (Latin-2) - 中欧语言
ISO/IEC 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。
ISO/IEC 8859-4 (Latin-4) - 北欧语言
ISO/IEC 8859-5 (Cyrillic) - 斯拉夫语言
ISO/IEC 8859-6 (Arabic) - 阿拉伯语
ISO/IEC 8859-7 (Greek) - 希腊语
ISO/IEC 8859-8 (Hebrew) - 希伯来语(视觉顺序)
ISO 8859-8-I - 希伯来语(逻辑顺序)
ISO/IEC 8859-9(Latin-5 或 Turkish)- 它把Latin-1的冰岛语字母换走,加入土耳其语字母。
ISO/IEC 8859-10(Latin-6 或 Nordic)- 北日耳曼语支,用来代替Latin-4ISO/IEC 8859-11 (Thai) - 泰语,从泰国的 TIS620 标准字集演化而来。
ISO/IEC 8859-13(Latin-7 或 Baltic Rim)- 波罗的语族
ISO/IEC 8859-14(Latin-8 或 Celtic)- 凯尔特语族
ISO/IEC 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的芬兰语字母和大写法语重音字母,以及欧元(€)符号。
ISO/IEC 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 计算机
    +关注

    关注

    19

    文章

    7488

    浏览量

    87849
  • 编码
    +关注

    关注

    6

    文章

    940

    浏览量

    54814
  • BUG
    BUG
    +关注

    关注

    0

    文章

    155

    浏览量

    15665
收藏 人收藏

    评论

    相关推荐

    计算机与网络技术基础

    计算机与网络技术基础了解计算机网络的形成与发展过程  掌握计算机网络的定义、分类、功能和典型应用  掌握计算机网络的组成结构  了解
    发表于 12-07 13:36

    计算机与第三方设备通信时,常用的计算机编码

    计算机与第三方设备通信时,常用的计算机编码
    发表于 07-10 13:06

    什么是计算机系统、计算机硬件和计算机软件?

    第一章 计算机系统概论1. 什么是计算机系统、计算机硬件和计算机软件?硬件和软件哪个更重要?解:P3计算机系统:由
    发表于 07-22 09:06

    计算机运算速度是指什么

    计算机运算速度是指什么?按传输介质分类,计算机网络可分为哪几种?使用16位二进制编码表示声音与使用8位二进制编码表示声音的效果有何不同?
    发表于 10-19 09:05

    什么是程序?什么是计算机

    什么是程序?程序(Program)流程、议程、行程、…为了完成某项任务,解决某个问题需要执行的一系列步骤计算机程序为了完成某项任务,解决某个问题由计算机执行的一系列指令(步骤)什么是计算机
    发表于 11-23 09:02

    计算机应用基础教案

    介绍什么是计算机计算机的特点,计算机的应用与发展:什么是计算机计算机的发展;计算机的分类;
    发表于 09-25 12:45 0次下载

    计算机应用基础课程

    计算机的分类、特点及应用领域 计算机的进位计数制 计算机的信息编码标准
    发表于 05-15 09:57 0次下载

    用SD卡设计8086计算机的硬盘

    介绍了8086计算机的体系架构,设计了8086计算机与SD卡连接的硬件接口,并使用软件和硬件相结合的调试方法,可快速调试验证SD卡的功能.通过FPGA的验证,SD卡作为8086
    发表于 11-09 16:47 66次下载

    计算机寻址方式解析

    计算机寻址方式解析 寻址方式 就是寻找操作数地址的方式,解决的是如何在指令中表示一个操作数的地址。 形式地址 :在指令中出现的操作数地址
    发表于 04-15 11:22 6809次阅读

    2002()《计算机原理》试卷

    2002()《计算机原理》试卷
    发表于 04-15 13:52 580次阅读

    从5个方面来解析计算机中的字符编码概念

    字符编码计算机编程中不可回避的问题,不管你用 Python2 还是 Python3,亦或是 C++, Java 等,我都觉得非常有必要厘清计算机中的字符编码概念。
    的头像 发表于 01-16 09:08 7930次阅读
    从5个方面来<b class='flag-5'>解析</b><b class='flag-5'>计算机</b>中的字符<b class='flag-5'>编码</b>概念

    计算机算术运算实现原理

    计算机算术运算实现原理解。
    发表于 03-26 14:04 5次下载

    比量子计算机更容易构建的新的计算机制造方法 用液晶构建计算机

    两位科学家在最新一期《科学进展》杂志撰文提出了一种新的计算机制造方法:用液晶构建计算机,这种计算机将使用分子的朝向来存储数据。在液晶计算机
    的头像 发表于 08-24 19:58 1299次阅读

    计算机编码解析(中)

    你是不是工作了很多年了,一直没搞清楚计算机中的各种编码规则,虽然平时都会使用,但是内部机制原理一直都是之其然而不知其所以然,开发中也会经常涉及到这块内容,但都没有太多重视,这可能会让有吃一些亏(出项目bug了),本着追本溯源的精神或是为了让自己在少出血bug
    的头像 发表于 03-30 10:28 1182次阅读
    <b class='flag-5'>计算机</b><b class='flag-5'>编码</b><b class='flag-5'>全</b><b class='flag-5'>解析</b>(中)

    计算机编码解析(下)

    你是不是工作了很多年了,一直没搞清楚计算机中的各种编码规则,虽然平时都会使用,但是内部机制原理一直都是之其然而不知其所以然,开发中也会经常涉及到这块内容,但都没有太多重视,这可能会让有吃一些亏(出项目bug了),本着追本溯源的精神或是为了让自己在少出血bug
    的头像 发表于 03-30 10:29 987次阅读
    <b class='flag-5'>计算机</b><b class='flag-5'>编码</b><b class='flag-5'>全</b><b class='flag-5'>解析</b>(下)