linqy的个人博客分享 http://blog.sciencenet.cn/u/linqy

博文

编码ANSI、GB2312、UNICODE与UTF-8区别

已有 12071 次阅读 2017-9-4 18:31 |个人分类:C++|系统分类:科研笔记

本文简要总结这几种编码的区别,具体用法就不说了,主要关注它们之间的区别。
下面是内容为:“1234567890rnABCDEFGHIJrn伟大的国际”内容在不同编码下的十六进制图:

一、ANSI
ANSI同ISO8859-1一样,属于单字节编码,最多表示范围0x00-0xFF,255个字符,中文使用了双字节编码。上图中ANSI下中文“伟大的国际”,对应就是CEB0 B4F3 B5C4 B9FA BCCA。
在简体中文操作系统中,ANSI编码对应就是GB2312编码,日文操作系统下,ANSI就是JIS编码,不能将不同语言内容存储在同一个ANSI编码文本中,因为ANSI编码限制无法区分编码所对应的语言类型。
2.unicode是国际通用编码,所以,可以搜索出来。
二、GB2312/GBK
GB2312/GBK,汉字国标编码,属于双字节编码,其中英文字母部分和iso8859-1一致,GBK编码能同时表示简体字和繁体字,GB2312只能表示简体字,GBK则兼容GB2312编码。
三、UTF-8
UTF-8本来设计主要用于网络传输,优点是单字节字节编码所以不用考虑字节序问题,但是目前也被应用在本地文档存储格式上, 上面图中“伟大的国际”占用15个字节位,每个汉字占用3字节编码。UTF属于不定长编码,每字符长度从1-6字节不等。
上图中EF BB BF就是指UTF-8,FE FF就是指UTF-16,更多标志参考文末说明。
三、UNICODE
UNICODE是国际通用编码标准,定义了所有可用来表示字符的数值集合(code point),而我们常说的UNICODE编码则是指UTF-16 LE,UTF-16是Windows上默认的Unicode编码方式,常用的Word文档、标准化软件等都是使用Unicode编码,所以,操作系统、浏览器等默认也都支持UNICODE编码文档。上图中的UNICODE是定长双字节编码,UNICODE编码中除了英文部分,其它语种编码跟其它编码格式都不兼容。
此外,还有Unicode big endian(大端)的说法,Unicode与Unicode big endian的区别就是在编码时小头优先与大头优先的区别。默认是小端存储,这属于编程方面的知识,普通用户无需关注,使用默认的UNICODE即可。
其它,还有ISO8859-1(Latin-1)等很多种编码格式,因为使用并不主流,不再介绍,有兴趣可搜索维基百科。
文件头编码标志如下:
   EF BB BF    UTF-8
   FE FF     UTF-16/UCS-2, little endian
   FF FE     UTF-16/UCS-2, big endian
   FF FE 00 00  UTF-32/UCS-4, little endian.
   00 00 FE FF  UTF-32/UCS-4, big-endian.
UCS是ISO制定标准,只是命名不同,支持格式范围有点差别。

参考地址:http://www.metsky.com/archives/730.html  



https://blog.sciencenet.cn/blog-3134052-1074221.html

上一篇:关于C语言中NULL, ‘\0’ ,‘0’, “0” ,0之间的区别
下一篇:c++中 char*和wchar*之间的互相转换
收藏 IP: 124.207.244.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-10 09:13

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部