计算机编码问题

一、二进制,位,字节、字符

我们都知道,在计算机内部,数据都是以二进制的形式存储,所有的信息最终都表示为一个由0和1组成的字符串,每一个二进制位都是只有0或者1两种状态,每一个0或者0称为位(bit),然后规定每八个二进制位为一个单位,为一个字节(byte),现在可以明白了,位和字节都是内存的空间单位,或者说是计算机中数据量的计量单位,如 int 为32位,也可以说是4字节。

字符就是在计算机显示器给我们显示的一个个文字或者符号,比如:A。B、C,你,好,&,+等都是一个字符

二、编码

刚才说的字符都是显示给人看的,计算机是不能直接存储字符的,那问题来的,计算机是怎么存储字符的呢?

刚才已经说过,计算机是以二进制的形式存储数据的,数据都是字符,存储方式是二进制,那他们是怎么对应上的呢?

这种将字符对应成二进制的形式就是------编码

例如:我们输入A,计算机将1000001存进内存,而显示时遇到1000001,就是在屏幕上显示A,

其实编码就是一个翻译的过程,将人类的字符语言与计算机的二进制语言进行翻译。

几种编码方式

ASCII编码:

美国人发明的,一个字节是8位,每一位上有0或者1两种情况,那一个字节就有256种不同的状态,如果将256种不同的编码对应一种字符,那就是256字符。老美需要表示的字符有128种,所以美国人发明了ASCII就是用256种种的128种规定了他们需要的字符:一下是常用的几种

ASCII的缺陷就在于表示的字符太少,世界上有那么多的字符,他只表示了128种,显然是不够用的。

iso8859-1 :

1字节八位的所有组合有256种,刚才ASCII只使用其中的128种,而iso-8859-1是使用单字节编码,范围就是0——255;显然ISO-8859-1表示的范围也是非常的有限。但是ISO-8859-1使用的是单字节编码,而计算机存储也是以字节为单位,所以两者对应关系是一致的,所以使用ISO-8859-1在计算机中是非常方便的,所以现在很多协议默认使用的就是ISO-8859-1编码方式。虽然ISO-8859-1不能直接表示中文,但是他可以利用其它编码方式表示中文,也就是将其他编码的中文拆分成一个一个字节来表示,这一个个字节组合起来就是要表示的中文。

GB2312:

国标码,专门用来表示汉字,是双字节编码,

规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的 字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的"全角"字符,而原来在127号以下的那些就叫"半角"字符了。

GBK :

GB2312 是对 ASCII 的中文扩展。 但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,然后又对GB2312进行扩展,

原先规定两个字节都是大于127的才表示一个中文,现在只要求第一个字节大于127,第二个字节可以小于127,这样又多出来很多编码,扩展之后的编码方案被称为 GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

unicode :

很多地区都开始制定自己国家、自己语言的编码方式,导致计算机的编码方式不能够统一,ISO (国际标谁化组织)的国际组织决定着手解决这个问题,重新搞一个包括了地球上所有文化、所有字母和符号 的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符。UNICODE 对于ASCII编码不变,只是将其长度由原来的8位扩展为16位,比如字母a为"00 61"。 至此,计算机中不论英文还是中文都是两个字节表示和存储;显然英文字符在计算机中造成了内存的浪费。

UTF

考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存
储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字
节不等。

UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全 部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。
Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

参考资料:http://blog.csdn.net/chenjing502/article/details/38364911

http://blog.csdn.net/zj510/article/details/37877651

时间: 2024-10-13 20:40:53

计算机编码问题的相关文章

计算机编码中的换行 CR与LF

以下的文字为转载,但是有错误的地方,博主自行进行了修正和补充,用红色标示. 原文地址在这里. ------------ 转载起始 ------------- "回车"(Carriage Return) 和 "换行"(Line Feed) 这两个概念的来历和区别. 1. 起源:电传打字机 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意,每秒钟可以打10个字符.但是它有一个问题,就是

计算机编码

编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码.用预先规定的方法将文字.数字或其它对象编成数码,或将信息.数据转换成规定的电脉冲信号.编码在电子计算机.电视.遥控和通讯等方面广泛使用.编码是信息从一种形式或格式转换为另一种形式的过程.解码,是编码的逆过程. ASCII 我们日常接触到的文件分ASCII和Binary两种.ASCII是"美国信息交换标准编码"的英文字头缩写,可称之为"美标".美标规定了用从0到127的128个数字来代

计算机编码方式

首先需要弄明白一件事,计算机只能识别0,1.因此字符什么的需要编码进行存储. 计算机是由老外发明的,他们可没有什么汉字 ,只有ABCD....,所以呢,最早的编码 是ASCII编码,最开始是给128个字符进行编码. 但这显然是不行的啊,世界上除了英语,还有那么多其他语言,因此ASCII码显然不适合 这种情况. 于是又有了Unicode编码方式,俗称万国码,可以存储好几万个字符.但是又有新的问题 出现了,Unicode码不适合存储啊,因为Unicode是定长编码,非常浪费存储空间, 这里又有了一种

计算机编码总结

英文字母和中文汉字在不同字符集编码下的字节数 英文字母: 字节数 : 1;编码:GB2312 字节数 : 1;编码:GBK 字节数 : 1;编码:GB18030 字节数 : 1;编码:ISO-8859-1 字节数 : 1;编码:UTF-8 字节数 : 4;编码:UTF-16 字节数 : 2;编码:UTF-16BE 字节数 : 2;编码:UTF-16LE 中文汉字: 字节数 : 2;编码:GBK 字节数 : 2;编码:GB18030 字节数 : 1;编码:ISO-8859-1 字节数 : 3;编码

计算机编码--为什么整数中负数的除法和右移不是一回事

缘起 最近在看卡耐基梅隆大学的[深入理解计算机系统实验]之datalab时,遇到一个题目: 1 /* 2 * divpwr2 - Compute x/(2^n), for 0 <= n <= 30 3 * Round toward zero 4 * Examples: divpwr2(15,1) = 7, divpwr2(-33,4) = -2 5 * Legal ops: ! ~ & ^ | + << >> 6 * Max ops: 15 7 * Rating

漫谈计算机编码:从ASCII码到UTF-8

第一阶段 盘古开天辟地--ASCII码 计算机大家都知道,本质是二进制运算和存储.在计算机中人类的几乎所有文字和字符都没法直接表示,所以美国人在发明计算机的时候为了让计算机可以用于保存和传输文字,就发明了ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),用128个数字分别映射到美国人常用的一些字符,一个字符只占用一个字节.这样一来就满足了美国人的交流需要. 第二阶段  军阀混战之战国七雄--GBK 但是计算

计算机 编码 解码

目录 1 字符 & 编码 2 记事本下的乱码 3 UTF-8解码过程 4 UTF-16解码过程 5 ISO-8859-1 6 byte范围 在阅读本文章之前,我建议你首先看阮一峰的博客:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 1 字符 & 编码 字符: 是文字和符号的总称.一个汉字.标点符号.英文字母.数字,这都是字符 字符集: 是多个字符的集合.我们可以理解为一本大字典.字符集种类很多,每个字

unicode,utf-8,ASCLL计算机编码原理

一.字符编码问题先介绍一下字符编码问题 1.ASCLL与GB2312 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122. 但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去. 国标码是汉字的国家标准编码,目前主要有GB2312.GBK.GB18030三种. GB2312

深入浅出计算机编码、乱码问题

原创: 王利涛  宅学部落  今天 很多新手在编写程序.使用软件打开文档或者浏览网页时,经常遇到乱码显示.全角半角的问题. 网上也有很多解决的方法,大部分都是跟编码方式和设置有关:比如Unicode.UTF-8.ASCII码.GB2312...,令人眼花缭乱,今天就给大家理一理它们之间的关系. 计算机只认识0和1这两个数字,我们输入的程序代码.文字都要经过编码,然后才能被计算机识别.解析和存储.早期的计算机环境是主要是英文,我们对构成英文的这些基本字母:拉丁字母编码就可以了,比如ASCII码.