字符编码

字符集和字符编码

狂风中的少年 提交于 2020-02-08 06:04:03
http://os.51cto.com/art/201503/467929.htm 什么是字符集 在介绍字符集之前,我们先了解下为什么要有字符集。我们在计算机屏幕上看到的是实体化的文字,而在计算机存储介质中存放的实际是二进制的比特流。那 么在这两者之间的转换规则就需要一个统一的标准,否则把我们的U盘插到老板的电脑上,文档就乱码了;小伙伴QQ上传过来的文件,在我们本地打开又乱码了。 于是为了实现转换标准,各种字符集标准就出现了。简单的说字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解 码)的转换关系。 那么为什么会有那么多字符集标准呢?这个问题实际非常容易回答。问问自己为什么我们的插头拿到英国就不能用了呢?为什么显示器同时有 DVI,VGA,HDMI,DP这么多接口呢?很多规范和标准在最初制定时并不会意识到这将会是以后全球普适的准则,或者处于组织本身利益就想从本质上区 别于现有标准。于是,就产生了那么多具有相同效果但又不相互兼容的标准了。 说了那么多我们来看一个实际例子,下面就是屌这个字在各种编码下的十六进制和二进制编码结果,怎么样有没有一种很屌的感觉? 字符集 16进制编码 对应的二进制数据 UTF-8 0xE5B18C 1110 0101 1011 0001 1000 1100 UTF-16 0x5C4C 1011 1000 1001

字符集 ---转

走远了吗. 提交于 2020-02-08 05:50:15
字符集:简单的说字符集就规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系;字符集只是一个规则集合的名字,就相当于 英语,汉语。一个字符集要正确编码转码一个字符需要三个关键元素:字库表,编码字符集,字符编码。 字符集 16进制编码 对应的二进制数据 UTF-8 0xE5B18C 1110 0101 1011 0001 1000 1100 UTF-16 0x5C4C 1011 1000 1001 1000 GBK 0x8CC5 1000 1100 1100 0101 字库表:相当于所有可读或者可显示字符的数据库,字库表决定了整个字符集能够展现标示所有字符的范围 编码字符集:即用一个编码值code point来标示一个字符在字库中的位置。 字符编码:将编码 字符集和实际存储数值之间的转换关系。 一般来说都会直接将code point的值作为编码后的值直接存储。 UTF-8和Unicode的关系就比较简单了。Unicode就是上文中提到的编码字符集,而UTF-8就是字符编码,即Unicode规则字库的一种实现形式。随着互联网的发展,对同一字库集的要求越来越迫切,Unicode标准也就自然而然的出现。它几乎涵盖了各个国家语言可能出现的符号和文字,并将为他们编号 如何识别乱码的本来想要表达的文字

Haffman编码(haffman树)

岁酱吖の 提交于 2020-02-08 05:03:42
Haffman编码 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去。。。)。现在给你一串字符以及它们所对应的权值,让你构造哈弗曼树,从而确定每个字符的哈弗曼编码。当然,这里有一些小规定: 1.规定哈弗曼树的左子树编码为0,右子树编码为1; 2.若两个字符权值相同,则ASCII码值小的字符为左孩子,大的为右孩子; 3.创建的新节点所代表的字符与它的左孩子的字符相同; 4.所有字符为ASCII码表上32-96之间的字符(即“ ”到“`”之间的字符)。 输入 输入包含多组数据(不超过100组) 每组数据第一行一个整数n,表示字符个数。接下来n行,每行有一个字符ch和一个整数weight,表示字符ch所对应的权值,中间用空格隔开。 输入数据保证每组测试数据的字符不会重复。 输出 对于每组测试数据,按照输入顺序输出相应的字符以及它们的哈弗曼编码结果,具体格式见样例。 样例输入 3 a 10 b 5 c 8 4 a 1 b 1 c 1 d 1 样例输出 a:0 b:10 c:11 a:00 b:01 c:10 d:11题解:让求一颗哈夫曼树,哈夫曼树是先找到最小的两个建一个根节点,这个根节点的权值为两个小的权值和;加入这个新节点,重新找;用优先队列实现;其根节点即为元素在树中的位置;代码: #include

ACM Haffman编码

雨燕双飞 提交于 2020-02-08 04:21:30
Haffman编码 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 哈弗曼编码大家一定很熟悉吧(不熟悉也没关系,自己查去。。。)。现在给你一串字符以及它们所对应的权值,让你构造哈弗曼树,从而确定每个字符的哈弗曼编码。当然,这里有一些小规定: 1.规定哈弗曼树的左子树编码为0,右子树编码为1; 2.若两个字符权值相同,则ASCII码值小的字符为左孩子,大的为右孩子; 3.创建的新节点所代表的字符与它的左孩子的字符相同; 4.所有字符为ASCII码表上32-96之间的字符(即“ ”到“`”之间的字符)。 输入 输入包含多组数据(不超过100组) 每组数据第一行一个整数n,表示字符个数。接下来n行,每行有一个字符ch和一个整数weight,表示字符ch所对应的权值,中间用空格隔开。 输入数据保证每组测试数据的字符不会重复。 输出 对于每组测试数据,按照输入顺序输出相应的字符以及它们的哈弗曼编码结果,具体格式见样例。 样例输入 3 a 10 b 5 c 8 4 a 1 b 1 c 1 d 1 样例输出 a:0 b:10 c:11 a:00 b:01 c:10 d:11 注意题目要求是按照按照输入顺序输出相应的字符以及它们的哈弗曼编码结果 #include <iostream> #include <queue> #include <string>

ASCII和Unicode编码的区别

跟風遠走 提交于 2020-02-07 20:00:18
编码 大小 支持语言 ASCII 1个字节 英文 Unicode 2个字节(生僻字4个) 所有语言 UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言 具体解释:   最早只有127个字母被编译到计算机里,也就是大小写字母、数字和一些符号,这个编译表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。   但是要处理中文显然一个字节是不够的,至少需要2个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。   你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc_kr里,各国有各国的标准,就会不可避免的出现冲突,结果就是,在多语言混合的文本中,显示出来就会有乱码。   因此,Unicode应运而生。Unicode把所有的语言都统一到一套编码里,这样就不会再有乱码问题了。   Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(偏僻字符需要4个字符)。现代操作系统和大多数编程语言都直接支持Unicode。   新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。   所以,本着节约的精神

Java 转换流的简单理解

一世执手 提交于 2020-02-07 01:49:22
字符编码和字符集 字符编码 计算机中储存的信息都是用二进制数表示的,而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。按照某种规则,将字符存储到计算机中,称为编码。反之,将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码。比如说,按照A规则存储,同样按照A规则解析,那么就能显示正确的文本符号。反之,按照A规则存储,再按照B规则解析,就会导致乱码现象。 编码:字符 --> 字节 解码:字节 --> 字符 字符编码,是一套自然语言的字符与二进制数之间的对应规则。 字符集 字符集,也叫编码表,是一个系统支持的所有字符集合,包括国家文字、标点符号、图形符号、数字等。 计算机要准确的存储和识別各种字符集符号,需要进行字符编码,一套字符集必然至少有一套字符编码。常见字符集有ASCII字符集、GBK字符集、Unicode字符集等。 编码引出的问题 在IDEA中,使用FileReader读取项目中的文本文件。由于IDEA的设置,都是默认的UTF-8编码,所以没有任何问题。但是,当读取系统中创建的文本文件时,由于系统的默认是GBK编码,就会出现乱码。 那么该如何解决呢?我们可以使用InputStreamReader类、OutputStreamWriter类,指定编码来进行读写操作,这时候就不会出现乱码的情况了。 OutputStreamWriter类 java

Python2 和 Python3 编码问题

大兔子大兔子 提交于 2020-02-07 01:47:03
基本存储单元 位(bit, b):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节。 1B = 8b 各种信息在计算机中存储、处理,至少需要一个字节的空间。 字节与字符 计算机存储的一切数据都是由一串 0 和 1 组成的字节序列构成。 字符就是一个符号,比如一个汉字、一个英文字母、一个标点都可以称为一个字符。 编码与解码 我们用编辑器打开的文本,看到的一个个字符,最终保存在磁盘上的时候都是以二进制字节序列形式存起来的。那么从字符到字节的转换过程就叫做编码(encode),反过来叫做解码(decode),两者是一个可逆的过程。编码是为了存储传输,解码是为了方便显示阅读。 编码规则 编码是人们定义的一种规则,使字符可以根据该规则,转换为对应的字节,方便存储和传输,也可以使字节转化成对应的字符用于显示、阅读。 例如,按照 ASCII 编码进行转换,字符 A 对应的字节为 0100 0001,占用 1 个字节的大小,一个字节也就是8位,可以表示 0 - 255,对于英文来讲 255 个字符已经足够显示所有的英文字符了,所以 ASCII(每个 字符占用一个字节) 编码是美国的标准编码 但是 ASCII 处理中文明显是不够的,中文不止 255 个汉字,所以中国制定了 GB2312 编码,用两个字节表示一个汉字

Python之路 - Day1 - Python基础1

佐手、 提交于 2020-02-07 00:37:45
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是什么 数据类型初识 数据运算 表达式if ...else语句 表达式for 循环 break and continue 表达式while 循环 作业需求 一、 Python介绍 Python的创始人为吉多·范·罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范·罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 最新的TIOBE排行榜,Python占据第三,仅次于Java和C。 Python崇尚优美、清晰、简单,是一个优秀并被广泛使用的语言。 由上图可见,Python整体呈上升趋势,反映出Python应用越来越广泛并且也逐渐得到业内的认可!!! Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(美国知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、腾讯、汽车之家、美团等。 目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发:

VS中的编码,多字节编码和unicode编码是什么意思

三世轮回 提交于 2020-02-06 19:53:52
我们发现编写C++代码时这里的字符集的修改好像没有什么作用,没错C++的实现是有具体的标准的,不是微软可以改变的,那么这里的字符集有什么用呢? 其实这里是指调用windowsSDK时使用的字符集,意思是你调用windowsAPI的时候如果需要用到字符串是必须使用unicode编码,而我们C++中字符串的编码是ANSI,通俗的讲中国就是GB2312。 这里可以配置windowsSDK的版本 在说以下MFC,刚开始一直以为MFC使用用来做界面的,其实这样的理解是错误的,MFC其实是使用windowsSDK封装的一些类库,可以很方便的使用。 来源: CSDN 作者: 一只小黑 链接: https://blog.csdn.net/qq_28437139/article/details/104199308

05 Unicode

帅比萌擦擦* 提交于 2020-02-04 14:30:28
代码点 Unicode标准 的本意很简单:希望给世界上每一种文字系统的每一个字符,都分配一个唯一的整数,这些整数叫做代码点(Code Points)。 代码空间 所有的代码点构成一个代码空间(Code Space) ,根据Unicode定义,总共有 1,114,112 个代码点,编号从0x0到0x10FFFF。换句话说,如果每个代码点都能够代表一个有效字符的话,Unicode标准最多能够编码1,114,112,也就是大概110多万个字符。最新的Unicode标准(7.0)已经给超过11万个字符分配了代码点。 代码平面 Unicode标准把代码点分成了17个代码平面(Code Plane),编号为#0到#16。每个代码平面包含65,536(2^16)个代码点(17*65,536=1,114,112)。其中,Plane#0叫做基本多语言平面(Basic Multilingual Plane,BMP),其余平面叫做补充平面(Supplementary Planes)。Unicode7.0只使用了17个平面中的6个,并且给这6个平面起了名字,如下图所示: 下面是这些平面的名字和用途: BMP(Basic Multilingual Plane) 大部分常用的字符都坐落在这个平面内,比如ASCII字符,汉字等。 SMP(Supplementary Multilingual Plane)