Unicode、UCS-2、Utf-8、ANSI

方便记忆

参考文章

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

ASCII码:

一个字节表示,最多有256种状态,其中,128种被编码成英文等常用字符。这对于英语国家是完全够使的,但对于其他国家,比如中国,常用汉字就有十万种,很明显是不够用的。为了解决这个问题,就必须对ASCII码进行扩展。但不同国家所拥有的符号都不一样,怎么把这个统一起来呢?

Unicode码:

首先需要搞清楚的是Unicode只是一个字符集,里面包含有世界各地的符号,每个符号被映射成为一个数字。Unicode只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如汉字的严字,在Unicode编码中是Hex:25 4e。占了十五位,至少用两个字节存储。其他更大的数字需要三到四个字节存储。这样就会有以下解决方案。

1、统一用四个字节存储。utf-32这样的坏处也可想而知,平常汉语加英文最多俩字节就可以了,如果用四个存储,空间整整多了一倍,会造成极大的资源浪费。

2、可变长存储。utf-8存储方式。开头ef-bb-bf代表utf-8存储方式。如果单字节存储,开头为0,后面七位为这个符号的Unicode编码。大于1字节存储的符号,开头为n个1,第n+1位为0。后面连n-1个字节开头都为10。剩下的位为unicode-big-endian编码的码数。左靠齐的。

3、码数范围内特殊的存储方式。UCS-2

在码数不超过0x ffff的范围内,可以用二字节存储unicode码,这时候有两种存储方式,一种小头在后,little-endianUnicode),一种大头在后big-endian编码。统一用两子节编码。

 

编码方式

ASCII

unicode

unicode-big-endian

utf-8

ANSI

含义

英文字母和常用符号编码

小头在后unicode二字节码数范围内unicode编码

 

 

大头在后unicode二字节码数范围内unicode编码

所有unicode码数范围内编码

系统默认编码方式。简体中文环境下GB2312,英文ASCII码。

是否适用于unicode

不是

码数范围

英文+常用符号

[0,0xffff]

[0,0xffff]

所有unicode码

英文字符+中文

每个字符所占字节数是否相同

相同

相同

相同

不相同

不相同

 

 

实例:

“严”字:

ANSI编码:

Unicode编码:

Unicode-big-endian编码:

Utf-8编码:

可以看出来ANSI编码方式在有简体中文的情况下默认采用GB2312的编码方式,繁体中文会采用big5编码。

中英文混编的情况下“yan严”:

ANSI编码: 英文ASCII码,中文GB2312

Unicode编码:

Unicode-big-endian编码:

Utf-8编码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值