字符编码常识

基本常识:

1.位和字节

位:(bit),计算机里存放的二进制的值(0/1)。

字节:(byte),一个字节由8位组成。8个位的组合有256个组合方式,其值范围:“00000000-11111111”,常用16进制来表示。

通常所说的字符编码,就是指定义一套规则,将真实世界里的字母、字符与计算机二进制序列进行相互转化。

2.编码标准

(1) 拉丁编码(适用于美国,欧洲)

<1> ASCII编码

只支持基础拉丁字母。设计:用1个字节来表示1个字符。且最高位为0,表示字符含义的只有7位,所以可表达的字符只有128个。(适合美国人)

<2> EASCII编码

到西欧的时候,发现美国人设计的ASCII编码无法满足,所以将一个字节中的最高位也利用了起来,可表达的字符256个。

<3> ISO 8859

虽然西欧使用256个字符能满足自身使用了,但是北欧、东欧还是不够,所以就出现了ISO 8859。

不是单独的字符集编码,而是一整套。从ISO 8859-(1-16)没有12,每个字符集对应不同的区域的编码。兼容ASCII的。

以上这三种编码都是单字节编码,一个字符对应一个字节。

(2)中文编码:

但是对于字符集更大的中文来说,并不合适。(大概有8w左右),所以需要多个字节来表示一个字符的编码规则。

GB2312编码:国家简体字符集,用两个字节表示一个汉字。同样还兼容ASCII编码规则。

(3) Unicode 编码:全世界字符统一编码规则

Unicode 采用4字节来表示一个字符,理论上,能表示的字符数就达到2的31次,21亿左右的字符。

但是这样一来,对于中文和拉丁字母就会形成一种浪费。另外如何让计算机区分是Unicode编码还是其他编码也是需要考虑的问题。

<1>UTF-8编码:Unicode编码的一种实现。Unicode是统一编码标准规范。

编码规则:

  • 规则1:对于单字节字符,字节的第一位为0,后7位为这个符号的Unicode码,所以对于拉丁字母,UTF-8与ASCII码是一致的。
  • 规则2:对于n字节(n&gt;1)的字符,第一个字节前n位都设为1,第n+1位为0,后面字节的前两位一律设为10,剩下没有提及的位,全部为这个符号的Unicode编码

如图:

UTF-8 与GBK和GB2312并不完全兼容。也就是说不能通过何种方式进行转换。只能通过查表的形式来转换。

UTF-8下的中文占3个字节或4个字节,并不固定。

3.UTF-8 的BOM

Bom是微软给UTF-8加上的,用于表示文件使用的是UTF-8编码。即在UTF-8编码的文件起始位置,加入三个字节“EE BB BF”。

标准并不推荐。

参照:

http://blog.jobbole.com/76376/

https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/

时间: 2024-10-17 04:36:31

字符编码常识的相关文章

字符编码常识及问题解析[转]

http://sharecore.net/blog/2014/08/10/zi-fu-bian-ma-chang-shi-ji-wen-ti-jie-xi/

python字符编码

1. 字符编码简介 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符 ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符) 后来为了将拉丁文也编码进了ASCII表,将最高位也占用了 阶段二:为了满足中文,中国人定制了GBK GBK:2Bytes代表一个字符 为了满

刨根究底字符编码之十二——UTF-8究竟是怎么编码的

UTF-8究竟是怎么编码的 1. UTF-8编码是Unicode字符集的一种编码方式(CEF),其特点是使用变长字节数(即变长码元序列.变宽码元序列)来编码.一般是1到4个字节,当然,也可以更长. 为什么要变长呢?这可以理解为按需分配,比如一个字节足以容纳所有的ASCII码字符,那何必补一堆0用更多的字节来存储呢? 实际上变长编码有其优势也有其劣势,优势是节省空间.自动纠错性能好.利于传输.扩展性强,劣势是不利于程序内部处理,比如正则表达式检索:而UTF-32这样等长码元序列(即等宽码元序列)的

Windows程序员必须知道的字符编码和字符集

 字符编码 (Character encoding) 在存储和传递文本过程中,为了使得所有电脑都能够正确的识别出文本内容,需要有一个统一的规则. 2. 字符集 (Character Set) ) 一般情况,一种编码方式对应一种字符集.如 ASCII,对应 ASCII 字符集.GBK 编码方式对应 GBK 字符集.但是也有一种编码方式,多种字符集的,Unicode 字符集有多种编码方式,如 utf-8,utf-16 等.  3.  ASCII ASCII(American Standard Cod

Python学习Day2笔记(字符编码)

1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一个字符都占2个字节 16位#英文文档改为Unicode编码大小变大一倍 为解决这种浪费空间问题#出现了Unicode扩展集 Utf-8 为可变长的字符编码 默认英文字符按ASCII码存储 中文按照3个字节存储 编码都要先decode成unicode再转码成目标编码 #获取默认编码import sys

字符编码集

•ASCII(American Standard Code for Information Interchange,美国信息互换标准代码),是基于常用的英文字符的一套电脑编码系统.我们知道英文中经常使用的字符.数字符号被计算机处理时都是以二进制码的形式出现的.这种二进制码的集合就是所谓的ASCII码.每一个ASCII码与一个8位(bit)二进制数对应.其最高位是0,相应的十进制数是0-127.如,数字“0”的编码用十进制数表示就是48.另有128个扩展的ASCII码,最高位都是1,由一些制表符和

XSS与字符编码的那些事儿

目录 0x00:基本介绍 0x01:html实体编码 0x02:新增的实体编码 实体编码变异以及浏览器的某些工作原理! 0x03:javascript编码 0x04:base64编码 0x05:闲扯 0x00基本介绍 提起XSS 想到的就是插入字符字符编码与各种解析了! 这也就是各种xss编码插件跟工具出世的原因!之前不懂浏览器是如何对我们编码过的代码进行解析的时候就是一顿乱插! 各种编码 各种插 没把编码还原就算了 还原了就算运气好!后来到PKAV经过二哥和短短的调教后才算是弄清楚了一点编码与

字符编码笔记:ASCII,Unicode和UTF-8【转载】

最近买了部安卓的手机,google nexus5 系统是安卓4.4.2. 刚到手就发现链接wifi有问题,一直在获取ip(obtaining ip...)和验证.试过恢复出厂 重启 各种都不管用,只有设置静态ip才可以,但是不能一直这样子呀!! 查了下路由器,路由器已经分配了地址.所以最大可能就是安卓手机上拿到这个地址没有成功写入配置文件,为什么没有写入呢,就是权限的问题了,不明白为什么google会出现这个错误. 因为不熟悉安卓系统,所以查了好几天,终于在一个外国网站上发现了下面这个解决办法,

python中的字符编码和转换

1.字符编码初识 最初的字符集是ASCII,ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号. 随着计算机技术的普及和发展,255个符号显然不满足全世界国家对符号数量的需求,因此各国开始发展自己的一套编码.那么针对中文: 为了