字符集编码

由于计算机只能存储和处理二进制的“0”和“1”,无法处理其他的字母、数字和符号,所以就需要有某种东西来达到类似桥梁的作用——例如图1-7中的ASCII——通过它,人们就可以看懂用计算机表示字母、数字或其他符号。

人们能够想到的最直接的方法是就是对字母进行编号,例如A为1,B为2,C为3等。著名英国作家弗朗西斯·培根(Francis Bacon)曾用五位序列来编码英文的26个字母,在十六世纪用来传递密信。

如果以二进制来表示25(2的5次方,5位)也就是32,可以存32个字母,对于26个英文字母来说是足够用了。但它无法区分大小写字母,也无法再区分数字和标点符号。因此就有了ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)。

标准的ASCII码发明于1963年,但1967年才第一次发表,1986年则作了最后一次更新,目前ASCII包含27(2的7次方,也就是128)个字符。这个128个字符用来表示大小写字母、数字0~9、标点符号、以及像“#”、“@”、“)”、“\r”(回车)、“\n”换行、“\t”(制表)等这样的特殊符号,如图1-12所示。

图1-12 标准ASCII码表

因为ASCII诞生的年代较早,所以使用非常广泛,使得不同的组织、不同的计算机之间能够互相交换数据与信息。但它也有个尴尬的限制:ASCII只为印欧语系日耳曼语族中的英语所设计,甚至都不兼容同一语系同一语族下的德语、荷语等其他语种。好在当初设计二进制的时候规定1个字节(Byte)由8位(Bit)二进制数组成,因此ASCII也就顺理成章地由7位扩展为8位(2的8次方),也就是扩展后ASCII有256个字符,又叫Extended ASCII(扩展ASCII,简称为EASCII)。

但EASCII由于国际化和标准化程度不够,所以就被设计更为优良的ISO/IEC 8859字符编码方案取代了。不过,即使是ISO/IEC 8859依然只是使用了单个字节,即8位来表示字符集,所以ASCII、EASCII和ISO/IEC 8859统称为单字节字符集(SBCS),而且ISO/IEC 8859也只能表示欧洲各国所使用到的字符,所以范围依然很有限。

当计算机在世界范围内的应用越来越广泛时,单字节字符集就已经完全无法使用了,因为仅仅中文常用汉字就有几千个,还不包括各种非常用字、生僻字。除此之外,每家计算机制造商、大的软件厂商也都发布自己的字符集。例如ASMO-708、DOS-720、Windows-1250、IBM EBCDIC等。这些字符集统称为多字节字符集(MBCS)。

为了解决这种“一锅粥”式的混乱局面,1992年,Unicode出现了。它为每种语言的每个字符设定了一个唯一的二进制编码,以满足跨语言跨平台的文本转换、处理要求。Unicode使用4字节共32位,也就是232个字符来填充字符集。Unicode本身只是一个字符集标准,针对它的实现称为UTF(Unicode Transformation Format,Unicode格式转换)。

顺便说一句,实际开发中使用UTF-8时有几个地方需要注意:

1. “UTF-8”是标准写法,因为Windows不区分大小写,所以写成“utf-8”也行。也可以把中间的“-”省略,写成“UTF8”;

2. 在MySQL的配置文件中只能使用“utf8”,如果写成“utf-8”或者“UTF-8”都不会生效;

3. 对于MySQL来说,“utf8mb4”才是真正意义上的“utf8”,因为低版本的MySQL中“utf8”最大字符长度为3字节,遇到表情之类的特殊字符就会出错。

由于Unicode的实现细节较为复杂,且了解这些对开发帮助不大,故无需深究。只需要知道:如果收发双方的计算机使用的都是Unicode编码,那么是绝不会出现乱码现象的。发出的内容是什么,收到的内容就是什么,也不会出现类似“???”、“锟斤拷”、“�”等莫名其妙的字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanBase 社区版 4.0 离线方式升级bp1至bp2 指南(含避坑总结)

注:目前社区版对 4.0 升级 bp1至 bp2也未有完善的文档,本次升级中也是遇到不少坑,写本文也希望对OB感兴趣的可以尝试少些遇坑。 也希望对升级有更好方式建议方式的朋友一起切磋交流,以便再进一步完善升级方案。 第一次做OB的升级&…

基于SSM框架的社区医院管理系统(计算机毕业设计)+万字说明文档

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

视频安防监控平台:Liveweb视频监控管理云平台方案

LiveWeb是深圳市好游科技有限公司开发的一套综合视频汇聚管理平台,可提供多协议(RTSP/RTMP/GB28181/海康Ehome/大华,海康SDK等)的视频设备接入,支持GB/T28181上下级联,RTSP\RTMP转GB/T28181,云台…

Linux进程概念-详细版(二)

目录 前言: 进程优先级 基本概念 查看系统进程 PRI与NI 查看进程优先级信息 通过top命令更改进程的nice值 通过renice命令更改进程的nice值 四个重要概念 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL ​编辑 …

前端监控方案sentry整体概览

查看PDF 目****录 1. Sentry介绍 1.1. 编写目的 1.2. 名词定义 2. Sentry监控原理概述 2.1. 常见的性能优化指标及获取方式 2.2. 常见的前端异常及其捕获方式 3. Sentry?整体架构 4. Sentry安装部署 4.1. 前提条件 4.2. 安装 5. Sentry环境配置 5.1. 初始化配置 …

C++11相关知识点

auto、decltype自动类型推导 auto并不代表实际的数据类型,且auto并不是在任何场合下都能推导出变量的实际类型,使用auto必须初始化。 auto 变量名 变量值; 当变量不是指针或引用类型时,推导的结果中不会保留const、volatile关键…

【面试】分布式锁专题

1.你说一下什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制,它主要用于解决,多个分布式节点之间对共享资源的互斥访问问题,确保在分布式系统中,即使存在有多个不同节点上的进程或线程,同一时刻也只有一…

Error relaunching VirtualBox VM process: 5 启动虚拟机时发生了错误

出现错误 一大早起来发现虚拟机打不开,看了虚拟机日志是正常的,还回了个档都不行。 最后我突然想起之前在哪看到过:“完美游戏平台会导致虚拟机的问题。” 解决方法 于是我把完美游戏卸载了,发现,真的&#xf…

MCU、ARM体系结构,单片机基础,单片机操作

计算机基础 计算机的组成 输入设备、输出设备、存储器、运算器、控制器 输入设备:将其他信号转换为计算机可以识别的信号(电信号)。输出设备:将电信号(0、1)转为人或其他设备能理解的…

从零开始:如何在.NET Core Web API中完美配置Swagger文档

目录 新建项目 RestFul Swagger配置 注释展示 版本控制 Token传值 方法封装 新建项目 打开visual studio创建新项目,这里我们选择.net core web api模板,然后输入项目名称及其解决方案创建新项目 这里使用配置一些其他信息,根据自己情…

百度搜索应适用中文域名国家标准,修复中文网址展示BUG

12月1日中文域名国家标准正式实施。该标准“明确了中文域名在编码、解析、注册、字表等方面的技术要求,适用于中文域名注册管理机构、注册服务机构、网络软硬件服务商及终端用户”。 00:23 显然,百度作为网络软硬件服务商,是包括在国家标准的…

Windows安装elasticsearch、Kibana以及IK分词器

一、下载 1.下载elasticsearch 访问官网Download Elasticsearch | Elastic,下载elasticsearch 2.下载 Kibana 访问Download Kibana Free | Get Started Now | Elastic ,下载 Kibana 3. IK分词器下载 访问Gitee 极速下载/elasticsearch-analysis-ik选…

第一个C++程序--(蓝桥杯备考版)

第一个C程序 基础程序 #include <iostream>//头⽂件 using namespace std;//使⽤std的名字空间 int main()//main函数 {cout << "hello world!" << endl; //输出&#xff1a;在屏幕打印"hello world!" return 0;}main函数 main 函数是…

Elasticsearch Serverless 中的数据流自动分片

作者&#xff1a;来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中&#xff0c;我们根据索引负载自动为数据流配置最佳分片数量&#xff0c;从而使用户无需摆弄分片。 传统上&#xff0c;用户会更改数据流的分片配置&#xff0c;以处理各种工作负载并充分利用可用资源。…

TcpServer 服务器优化之后,加了多线程,对心跳包进行优化

TcpServer 服务器优化之后&#xff0c;加了多线程&#xff0c;对心跳包进行优化 TcpServer.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <iostream> #include <winsock2.h> #include <ws2tcpip.h> #include <vector> #include <map> #…

python进阶-05-利用Selenium来实现动态爬虫

python进阶-05-利用Selenium来实现动态爬虫 一.说明 这是python进阶部分05&#xff0c;我们上一篇文章学习了Scrapy来爬取网站&#xff0c;但是很多网站需要登录才能爬取有用的信息&#xff0c;或者网站的静态部分是一个空壳&#xff0c;内容是js动态加载的,或者人机验证&…

Linux —— vim 编辑器

一、什么是vim vim是一个功能强大、高度可定制的文本编辑器。以下是对vim编辑器的具体介绍&#xff1a; 历史背景&#xff1a;vim最初由Bram Moolenaar在1991年开发&#xff0c;作为vi编辑器的增强版&#xff0c;增加了许多新的特性和改进。它继承了vi的基本编辑功能和键盘快捷…

高效率同步降压转换器 - YB2416D: 实现快速充电和高效能供电的利器

概述: YB2416是一款输入耐压超过40V&#xff0c;在4.5V~30V输入电压条件下正常工作&#xff0c;并且能够实现精确恒压以及恒流的同步降压型DC-DC转换器。 内部集成80m2的上管和40m2的下管&#xff0c;无需外部肖特基二极管&#xff0c;可连续输出3A电流。输出3A电流时系统转换…

Repo管理

文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道&#xff0c;Git是用来管理某一个仓库&#xff0c;那当一个项目用到了多个仓库时&#xff0c;怎么来同步管理这些仓库呢&#xff1f;这个时候就可以引入Repo管理。 Repo介绍 …

神经网络的起源与工作原理

神经网络起源&#xff1a;一个生物神经网络是由一组化学上相连或功能上相关的神经元组成。一个神经元可能与许多其他神经元相连&#xff0c;网络中的神经元和连接的总数可能很广泛。连接&#xff0c;称为突触&#xff0c;通常是从轴突到树突形成的&#xff0c;尽管树突和其他连…