ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别(转载)
原文出处:http://www.blogjava.net/xcp/archive/2009/10/29/coding2.html
最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总结网上一些朋友提供的 ascii,ISO-8859-1,unicode, utf8,gb2312,big5,gbk,gb18030等几种常区别.
1. ASCII码
    目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。
ASCII表
| 
 ASCII值  | 
 控制字符  | 
 ASCII值  | 
 控制字符  | 
 ASCII值  | 
 控制字符  | 
 ASCII值  | 
 控制字符  | 
| 
 0  | 
 NUL  | 
 32  | 
 (space)  | 
 64  | 
 @  | 
 96  | 
 、  | 
| 
 1  | 
 SOH  | 
 33  | 
 !  | 
 65  | 
 A  | 
 97  | 
 a  | 
| 
 2  | 
 STX  | 
 34  | 
 ”  | 
 66  | 
 B  | 
 98  | 
 b  | 
| 
 3  | 
 ETX  | 
 35  | 
 #  | 
 67  | 
 C  | 
 99  | 
 c  | 
| 
 4  | 
 EOT  | 
 36  | 
 $  | 
 68  | 
 D  | 
 100  | 
 d  | 
| 
 5  | 
 ENQ  | 
 37  | 
 %  | 
 69  | 
 E  | 
 101  | 
 e  | 
| 
 6  | 
 ACK  | 
 38  | 
 &  | 
 70  | 
 F  | 
 102  | 
 f  | 
| 
 7  | 
 BEL  | 
 39  | 
 ,  | 
 71  | 
 G  | 
 103  | 
 g  | 
| 
 8  | 
 BS  | 
 40  | 
 (  | 
 72  | 
 H  | 
 104  | 
 h  | 
| 
 9  | 
 HT  | 
 41  | 
 )  | 
 73  | 
 I  | 
 105  | 
 i  | 
| 
 10  | 
 LF  | 
 42  | 
 *  | 
 74  | 
 J  | 
 106  | 
 j  | 
| 
 11  | 
 VT  | 
 43  | 
 +  | 
 75  | 
 K  | 
 107  | 
 k  | 
| 
 12  | 
 FF  | 
 44  | 
 ,  | 
 76  | 
 L  | 
 108  | 
 l  | 
| 
 13  | 
 CR  | 
 45  | 
 -  | 
 77  | 
 M  | 
 109  | 
 m  | 
| 
 14  | 
 SO  | 
 46  | 
 .  | 
 78  | 
 N  | 
 110  | 
 n  | 
| 
 15  | 
 SI  | 
 47  | 
 /  | 
 79  | 
 O  | 
 111  | 
 o  | 
| 
 16  | 
 DLE  | 
 48  | 
 0  | 
 80  | 
 P  | 
 112  | 
 p  | 
| 
 17  | 
 DCI  | 
 49  | 
 1  | 
 81  | 
 Q  | 
 113  | 
 q  | 
| 
 18  | 
 DC2  | 
 50  | 
 2  | 
 82  | 
 R  | 
 114  | 
 r  | 
| 
 19  | 
 DC3  | 
 51  | 
 3  | 
 83  | 
 X  | 
 115  | 
 s  | 
| 
 20  | 
 DC4  | 
 52  | 
 4  | 
 84  | 
 T  | 
 116  | 
 t  | 
| 
 21  | 
 NAK  | 
 53  | 
 5  | 
 85  | 
 U  | 
 117  | 
 u  | 
| 
 22  | 
 SYN  | 
 54  | 
 6  | 
 86  | 
 V  | 
 118  | 
 v  | 
| 
 23  | 
 TB  | 
 55  | 
 7  | 
 87  | 
 W  | 
 119  | 
 w  | 
| 
 24  | 
 CAN  | 
 56  | 
 8  | 
 88  | 
 X  | 
 120  | 
 x  | 
| 
 25  | 
 EM  | 
 57  | 
 9  | 
 89  | 
 Y  | 
 121  | 
 y  | 
| 
 26  | 
 SUB  | 
 58  | 
 :  | 
 90  | 
 Z  | 
 122  | 
 z  | 
| 
 27  | 
 ESC  | 
 59  | 
 ;  | 
 91  | 
 [  | 
 123  | 
 {  | 
| 
 28  | 
 FS  | 
 60  | 
 <  | 
 92  | 
 "  | 
 124  | 
 |  | 
| 
 29  | 
 GS  | 
 61  | 
 =  | 
 93  | 
 ]  | 
 125  | 
 }  | 
| 
 30  | 
 RS  | 
 62  | 
 >  | 
 94  | 
 ^  | 
 126  | 
 ~  | 
| 
 31  | 
 US  | 
 63  | 
 ?  | 
 95  | 
 —  | 
 127  | 
 DEL  | 
| 
 NUL 空字符(Null)  | 
 VT 垂直制表  | 
 SYN 空转同步  | 
| 
 SOH 标题开始  | 
 FF 走纸控制  | 
 ETB 信息组传送结束  | 
| 
 STX 正文开始  | 
 CR 回车  | 
 CAN 作废  | 
| 
 ETX 正文结束  | 
 SO 移位输出  | 
 EM 纸尽  | 
| 
 EOY 传输结束  | 
 SI 移位输入  | 
 SUB 换置  | 
| 
 ENQ 询问字符  | 
 DLE 空格  | 
 ESC 换码  | 
| 
 ACK 承认  | 
 DC1 设备控制1  | 
 FS 文字分隔符  | 
| 
 BEL 报警  | 
 DC2 设备控制2  | 
 GS 组分隔符  | 
| 
 BS 退一格  | 
 DC3 设备控制3  | 
 RS 记录分隔符  | 
| 
 HT 横向列表  | 
 DC4 设备控制4  | 
 US 单元分隔符  | 
| 
 LF 换行  | 
 NAK 否定  | 
 DEL 删除  | 
英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。
但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段,所以出现后面的统一编码方式。
注:
若想得到更详细的参见http://ascii.911cha.com/
2、各地的方言
在中国,大陆最常用的就是GBK18030编码,除此之外还有GBK,GB2312,这几个编码的关系是这样的。
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,但为了处理汉字,又设计出用于简体中文的GB2312和用于繁体中文的big5。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。
从ASCII、GB2312到GBK,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK都属于双字节字符集 (DBCS)。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。从汉字字汇上说,GB18030在GB13000.1的20902个汉字的基础上增加了CJK扩展A的6582个汉字(Unicode码0x3400-0x4db5),一共收录了27484个汉字。
CJK就是中日韩的意思。Unicode为了节省码位,将中日韩三国语言中的文字统一编码。GB13000.1就是ISO/IEC 10646-1的中文版,相当于Unicode 1.1。
GB18030的编码采用单字节、双字节和4字节方案。其中单字节、双字节和GBK是完全兼容的。4字节编码的码位就是收录了CJK扩展A的6582个汉字。例如:UCS的0x3400在GB18030中的编码应该是8139EF30,UCS的0x3401在GB18030中的编码应该是8139EF31。
微软提供了GB18030的升级包,但这个升级包只是提供了一套支持CJK扩展A的6582个汉字的新字体:新宋体-18030,并不改变内码。Windows 的内码仍然是GBK。
也就是说Big5支持繁体中文,GB2312支持简体中文,Big5,GB2312是GBK的子集,GBK是GB18030的子集
日本:SJIS编码
注:
汉字编码简明对照表http://www.knowsky.com/resource/gb2312tbm.htm
3、Unicode
如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。
在这种语言环境下,不会再有语言的编码冲突,在同屏下,可以显示任何语言的内容,这就是Unicode的最大好处。
那么Unicode是如何编码的呢?其实非常简单。
就是将世界上所有的文字用2个字节统一进行编码。可能你会问,2个字节最多能够表示65536个编码,够用吗?
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。现在用的是UCS-2,即2个字节编码.
以现在的发展肯定是不够用得,如《康熙字典》收录了四万七千零三十五字,《汉语大字典》收录了五万六千多个。到目前为止,国际标准组织(ISO)制定国际标准时,共收集到汉字七万多字,所以出现UCS-4, 即4个字节编码,由原先的65536个编码扩展至将近100万编码。
注:
中日韩汉字Unicode编码表:http://www.chi2ko.com/tool/CJK.htm
查询需要Unicode编码的字符:
http://www.unicode.org/charts/unihan.html
http://www.nengcha.com/code/unicode/
4、兼容codepage
那么既然统一了编码,如何兼容原先各国的文字编码呢?这个时候就需要codepage了。
什么是codepage?codepage就是各国的文字编码和Unicode之间的映射表。比如简体中文和Unicode的映射表就是CP936,点这里查看官方的映射表。
以下是几个常用的codepage,相应的修改上面的地址的数字即可。
codepage=936 简体中文GBK
codepage=950 繁体中文BIG5
codepage=437 美国/加拿大英语
codepage=932 日文
codepage=949 韩文
codepage=866 俄文
codepage=65001 unicode UFT-8
从936中随意取一行,例如:0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH.前面的编码是GBK的编码,后面的是Unicode。通过查这张表,就能简单的实现GBK和Unicode之间的转换
5、UTF-8
现在明白了Unicode,那么UTF-8又是什么呢?又为什么会出现UTF-8呢?
Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题,尤其在那些基于网络的应用中。
因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8和ASCII中,“A”的编码都是0x41.
例:11100100 10111101 10100000à0xE4BDA0 “你”字的UTF-8编码
01001111 01100000 à0x4F60 “你”的Unicode编码
按照UTF-8的编码规则,11100100 10111101 10100000分解如下:xxxx0100 xx111101 xx100000,把除了x之外的数字拼接在一起,01001111 01100000就变成“你”的Unicode编码了.注意UTF-8的最前面3个1,表示整个UTF-8串是由3个字节构成的经过UTF-8编码之后,再也不会出现敏感字符了,因为最高位始终为1。
Unicode和UTF-8之间的转换关系表:
0000 0000-0000 007F | 0xxxxxxx
0000 0000-0080 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Unicode编码转换到UTF-8,简单的把Unicode字节流套到x中就变成UTF-8了。
ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别(转载)的更多相关文章
- ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记
		
字符编码的发展历史 Unicode和UTF-8有何区别? 在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番. 一个字节:最初一个字节的标准是混乱的, ...
 - 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
		
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
 - 汉字编码:GB2312, GBK, GB18030, Big5
		
前一篇博文:ANSI是什么编码?中有这样一段小故事: 话说计算机是由美国佬搞出来的嘛,他们觉得一个字节(可以表示256个编码)表示英语世界里所有的字母.数字和常用特殊符号已经绰绰有余了(其实ASCII ...
 - 字符编码-ASCII,GB2312,GBK,GB18030
		
ASCII ASCII,GB2312,GBK,GB18030依次增加,向下兼容. 手机只需要支持GB2312 电脑中文windows只支持GBK 发展历程 如果你使用编译器是python2.0版本,默 ...
 - GB2312,GBK,GB18030,UTF8四种汉字编码标准有什么差别和联系
		
 从GB2312.GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有同样的编码,后面的标准支持很多其它的字符.在这些编码中,英文和中文能够统一地处理. 区分中文编 ...
 - 浅显总结ASCII Unicode UTF-8的区别
		
如果觉得此地排版不好,欢迎访问我的博客 浅显总结ASCII Unicode UTF-8的区别 制作表单时,为了追求更好的用户交互体验,常常会有提示性的内容,比如提醒用户字符的限制.由于英文,中文字符的 ...
 - 字符编码 ASCII unicode UTF-8
		
字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(b ...
 - 【转】关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
		
转载地址:http://www.imkevinyang.com/2010/06/%E5%85%B3%E4%BA%8E%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%EF%BC ...
 - 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
		
字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...
 
随机推荐
- BUG -Failed to compile.
			
检查代码发现: 图片的路径写错了 改回正确路径页面可以正常显示
 - X100S Collection Before 2014/08/01
			
风暴前的东京湾 // Tokyo Bay before Storm 上野公园 // Ueno Park
 - Android 底部导航栏实现一   Fragment-replace
			
[效果](这里下载的软件收费的试用有水印) [推荐]这里推荐一个图标网http://iconfont.cn/.以上图标来自此图标网 [项目结构] [步骤] ①创建布局文件,写底部导航栏 <?xm ...
 - 2059-authentication plugin 'caching_sha2_password"cnnot bt loaded :mysql8.0数据库链接不上:
			
问题:最近数据库出了问题,就重新安装了数据库8.0,8.0建立数据库时出现问题,错误提示: 2059-authentication plugin 'caching_sha2_password" ...
 - 使用 new XMLHttpRequest() 制作下载文件进度条
			
mui 进度控件使用方法: 检查当前容器(container控件)自身是否包含.mui-progressbar类: 当前容器包含.mui-progressbar类,则以当前容器为目标控件,直接显示进度 ...
 - BurpSuit2.0专业版破解
			
简介 Burp Suite 是用于攻击web 应用程序的集成平台.它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻 ...
 - iis 限制动态IP地址访问次数
			
An IP Address Blocking HttpModule for ASP.NET in 9 minutes namespace YourModuleNameHere 10 { 11 publ ...
 - 如何下载 Google Play 应用的apk
			
Google Play 不能直接下载apk安装包,解决办法,安装插件下载 第一步 FQ就不说了 第二步 安装google浏览器 APK Downloader插件 第三步 打开Google play网站 ...
 - 通过http上下文判断是否是Ajax请求
			
using System; namespace System.Web.Mvc { /// <summary>Represents a class that extends the < ...
 - LeetCode算法题-Fizz Buzz(Java实现)
			
这是悦乐书的第221次更新,第233篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第88题(顺位题号是412). 编写一个程序,输出从1到n的数字的字符串表示.但对于三的 ...