文档章节

字符编码常识

solverpeng
 solverpeng
发布于 2016/06/01 18:14
字数 805
阅读 12
收藏 0

基本常识:

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/

© 著作权归作者所有

共有 人打赏支持
solverpeng

solverpeng

粉丝 11
博文 87
码字总数 40353
作品 0
朝阳
程序员
私信 提问
字符编码常识及问题解析

字符编码常识及问题解析 ShareCore2014-08-09167 阅读 字符解析编码 基本常识 1.位和字节 说起编码,我们必须从最基础的说起,位和字节(别觉得这个过于简单不值一说,我还真见过很多个不能区...

ShareCore
2014/08/09
0
0
java中字符与字节的编码关系

一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在U...

蛮卍
2015/01/14
0
0
servlet 中文乱码问题及解决方案

一、常识了解 1.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.java.nio.charset.Charset.defaultCharset() 获得平台默认字符编码; 3.getBytes() 是通过平台默...

三番水
2013/05/31
0
0
XML中的转义字符

因为最近可能会用MVVM模式去写项目,所以开始了对DataBinding的学习。 学习过程中发现有些字符在xml文件中必须要进行转义,否则无法使用,所以就查了一下资料。 下面是查到的内容,因为必须记...

奥金魔导师
2016/11/10
4
0
android虚拟机出现Hint: use '@foo'的解决方法。

[2011-08-19 23:54:05 - Emulator] invalid command-line parameter: FilesGoogleandroid-sdktools/emulator-arm.exe.[2011-08-19 23:54:05 - Emulator] Hint: use '@foo' to launch a virtu......

铂金小猪
2011/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

组合问题(先提取数字+全组合)

今天在网上看到一个问题:想从A,B,C,D,E字母中选取3个A,B,C;并做出全组合ABC,ACB,BAC,BCA,CBA,CAB。这样的结果会有多少? 想法也是和问题一致: 1. 先从数列中选取所需要的值: A,B,C,D,E中选取...

tedzheng
14分钟前
0
0
vi常用命令

记录存档用,如下: 1、打开命令: vi+filename 2、退出命令: :q 退出而且不保存修改的内容 :q! 强制退出不保存修改的内容 :wq 退出并且保存修改的内容 :wq! 强制保存修改的内容然后退出...

ZICK_ZEON
15分钟前
1
0
查看Mysql正在执行的事务、锁、等待

一、关于锁的三张表(MEMORY引擎) ## 当前运行的所有事务mysql> select * from information_schema.innodb_trx\G;*************************** 1. row *************************** ......

吴伟祥
15分钟前
1
0
判断ifream 是否加载完成

$(function(){var iframe = document.getElementById("mainFrames"); if (iframe.attachEvent){ iframe.attachEvent("onload", function(){ //你要做的事}); }els......

卖星星的小矮人
18分钟前
1
0
11 Git —— 自定义Git

11 Git —— 自定义Git 忽略特殊文件 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ....

lwenhao
25分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部