永发信息网

GBK内码 Unicode码 区位码有什么区别和联系 怎样互相转化

答案:1  悬赏:60  手机版
解决时间 2021-05-07 09:20

请懂行的人来 不要复制一大堆的

能令我满意的话 另有奖励分奉送

最佳答案

ANSI , 这是美国国家标准协会制定的编码格式,例如"A汉" 在这种编码方式下的内存值为 41 BA BA ,'A'占用一个字节,"汉"用两个字节,


而且 BA BA 正式 GBK内码的值, 那让我们先认识GBK编码.


GB2312,GBK,GB18030都是中国人自己发明的(中国之外并不使用的), 他们出现的时间顺序是GB2312 -> GBK -> GB18030 ,他们是包含关系,GB我猜是 "国标" 的意思 "k" 可能是 "扩展", 这些编码都是书面协议,要在计算机内部表示所以GB2312的内存值须在原来的每个字节值(区位码)上加0x80得到机内码,加上0x80是为了使得每个字节的最高位为1,这样就可以在内存中区分汉字和ASCII了[因为ASCII的最高位都为0]. 但是后来要在GB2312上扩展(得到GBK,GB18030),就需要更多的编码空间,所以GBK,GB18030就没有要求第二个字节的的最高位为1了,而是通过第一个字节来判断这是一个字节的ASCII还是两个字节的GBK.另外需要说明一点GB2312,GBK,GB18030是向下兼容的,例如 "汉" 在GB2312,GBK,GB18030中都是BA,BA .


另外,GB2312,GBK并没有因为GB18030的出现退出市场,在一些嵌入式设备中还是应用广泛的,因为减少字库容量可以大大减少成本.


回到之前的ANSI, 我们大概知道了GBK(不知道人们为什么喜欢用GBK而不是GB18030,姑且认为是GBK只有3个字母,书写方便吧!),那么ANSI又是怎么回事呢? ANSI就像一个指针,本身没有内容,如果指向"中国的编码",那么它就是GBK,如果指向"印度的编码",他就是x??x.也就是说在中国ANSI是GBK,在日本ANSI是XXX,在印度ANSI是???,但是他们在windows的记事本中都只能看到ANSI.但是ANSI也做了一些小的变动,就像刚才一样,'A'在内存中只占用了一个字节,也就是说ANSI = ASCII + 本地编码


Unicode:


但是,我们怎么在一个汉语资料中书写日文符号呢?这时,Unicode出现了,不过它是谁发明的,反正Unicode把世界上的所有文字符号都包含进来了,不仅解决了刚才说的问题,而且程序员用Unicode写的程序可以在全世界的电脑上运行.C语言中用wchar_t表示.


UCS:


据说UCS是和Unicode一样的工程,最后两个工程达成共识,所以编码完全兼容.所以我就把UCS看做Unicode.


这里的UCS-2就是常说的UCS,只使用了两个字节保存一个字符,而UCS-4则是使用4个字节保存一个字符.


UTF-8:


(ucs transformation format),为什么要创造UTF-8呢?其中一个原因是:0x00在C语言及操作系统文件名(等..)中有特殊意义(如字符串结尾),然而按照Unicode编码的话,很可能这个字符的第一个字节(高字节)为非零数值,而低字节为零,这样C语言就会误认为这是字符串的结尾.所以UTF-8的一个功能是保证Unicode编码表中不出现0x00(当然正常的0x00是可以的)


UCS-2编码,Unicode(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx (第一个1之后有几个1就表示后面还有一个字节,这里后面还有1个)
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx (第一个1之后有几个1就表示后面还有一个字节,这里后面还有2个)


应为UTF-8的这种编码方式,它不需要判断大小端模式,所以它是利于网路传输的(我也不知道是为什么)


(BOM) EF BB BF ,我们可以通过BOM来判断文本是否为UTF-8编码格式.


打开一个文本文件时如何判断是何种编码呢?


1)提示用户选择编码类型


2)根据一定的规则猜测编码类型


3)检测文件头标识识别编码类型
EF BB BF    UTF-8
FE FF      UTF-16/UCS-2(Unicode), little endian,(在文件一个只含一个字母'A'的中文件中,文件内容为 FE FF 00 41 )
FF FE      UTF-16/UCS-2(Unicode), big endian,(在文件一个只含一个字母'A'的中文件中,文件内容为 FF FE 41 00 )
FF FE 00 00   UTF-32/UCS-4, little endian.
00 00 FE FF   UTF-32/UCS-4, big-endian.



区位码 国标(GBK) 内码


"汉" 1A1A 3A3A BABA


国标 = 区位码 + 0x20 (每个字节)


内码 = 国标(GBK) + 0x80 (每个字节)


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
人生是不是如梦,岁月如梳
小说的TXT下载
为什么我的炎息红龙带上去之后不加属性了??
谁有盗墓笔记全集TXT啊
关于罗宁和整个T6套装效果
某商场的电视机原价为2500元,现已8折,,如
装个宽带要多少时间
我最近头经常的晕,帮帮解决一下。(看下详细
匹克基德2代什么时候上市?
胜营牙科在哪里啊,我有事要去这个地方
刀锋和飞虎队哪个好?
怎样让自己既不是明有不是义
怎样确诊是甲流感?有哪些症状?
我要全本的小说
97八神连技
推荐资讯
九阳豆浆机电热管糊了 还能不能用了?
我的富康是2000年买的,车况保养得很好,为什么
从化顺城美的专卖店在什么地方啊,我要过去处
人除都男与女、还有谁?
怎样克服害怕老鼠的心理
双鱼座跟什么星座有缘
IQ和EQ哪个更重要?
炫舞怎么下载不上
有没有人知道这是什么意思?
伯恩翰对富勒姆谁会赢
动态影集加了音乐但没声音
引用古诗的优美句子,引用古诗写句子
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?