• 编码格式


    计算机常见的编码格式
    ASCII,ISO-8859-1,GB2312,GNK,UTF-8,UTF-16等
    ASCII:总共有128个字符,通过键盘输入就能显示;
    ISO-8859-1:总共能表示256个字符,扩展了ASCII编码,但是仍然是的单字节编码;
    GB2312:双字节编码,包含6763个汉字
    GBK:扩展GB2312,加入更多汉字,兼容GB2312
    几种编码格式的比较:
    对中文字符几种编码格式都能处理,GB2312与GBK编码规则类似,但是GBK范围更大,它能处理所有汉字字符,所以GB2312与GBK比较,应该选择GBK。UTF-16与UTF-8都是处理Unicode编码,它们的编码规则不太相同,相对来说UTF-16编码效率最高,字符到字节相互转换更简单,进行字符串操作也更好。Java的内存编码就采用UTF-16编码,但是它不适合在网络之间传输,因为网络传输容易损坏字节流,一旦字节流损坏就很难恢复,相比较而言UTF-8更适合玩过传输。
     
    String s = “这是一段中文字符串”;
    byte [] b = s,getBytes(“UTF-8“);
    String n = new String(b,”UTF-8”);
     
    0.字符集&编码
    字符集:字符的集合;
    常见的字符集有:ISO-8859-1  ISO-8859-16 GB2312  GBK  GB18030  Unicode
    字符集只定义了每个符号对应的编号,这个编号与计算机没有任何关系。字符集不规定每个字符在计算机中用几个字节表示,这个这个编码encoding的范畴。
     
    编码:指一个字符在计算机中怎样存放,是采用一个字节,还是采用两个字节,还是采用不定长的字节?单字节,双字节,多字节。
    GB2312,GBK,Big5一般既是字符集,又是编码。而unicode字符集是字符集
    判断字符数等需要从头开始遍历,效率较低。而保存在磁盘中则以UTF-8,这样可以保证空间的节省。
     
     
    先做一个小小的试验:
           在一个文件夹里,把一个txt文本(文本里包含“今天的天气非常好”这句话)分别另存为ansi、unicode、utf-8这三种编码的txt文件。然后,在该文件夹上点击右键,选择“搜索(E)…”。
    搜索“天气”二字,可以搜索出ansi和unicode这两种编码的txt文件,搜索不出utf-8编码的文件。
    原因:
    1.中文操作系统默认ansi编码,生成的txt文件默认为ansi编码,所以,可以搜索出来。
    2.unicode是国际通用编码,所以,可以搜索出来。
    3.utf-8编码是unicode编码在网络之间(主要是网页)传输时的一种“变通”和“桥梁”编码。utf-8在网络之间传输时可以节约数据量。所以,使用操作系统无法搜索出txt文本。
     
    按照utf-8创始人的愿望:
    端(unicode)——传输(utf-8)——端(unicode)
    但是,后来,许多网站开发者在开发网页时直接使用utf-8编码。
    端(utf-8)——传输(utf-8)——端(utf-8)
     
           所以,在浏览器上看到的编码是:unicode(utf-8)。正因为在浏览器上这么并列地列出unicode(utf-8),造成许多网友(甚至不少程序员)误认为unicode=utf-8。其实,按照utf-8创始人的原意,在开发网页时使用utf-8编码是错误的做法,并且,早期的浏览器也不支持解析utf-8编码。但是,众人的力量是巨大的,微软不得不“趋炎附势”,在浏览器上支持解析utf-8编码。
           问题是:utf-8编码影响了网站开发者,或者说,网站开发者“扩展”了utf-8编码的使用范围。但是,网站开发者仍然无法影响各类文档的开发者,所以,word文档和一些国际通用的文档仍然使用unicode编码而不使用utf-8编码。
    比如:“严”的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。
     
           在中文和日文操作系统里生成的(txt和xml)文件的编码虽然都是ansi,但是,在简体中文系统下,ansi 编码代表 GB2312 编码,在日文操作系统下,ansi 编码代表 JIS 编码。不同 ansi 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ansi 编码的文本中。
           结论:国际文档(txt和xml)使用unicode编码是正宗做法;操作系统和浏览器都能够“理解”unicode编码。浏览器“迫于压力”才“理解”utf-8编码。但是,操作系统有时只认unicode编码。
    Unicode与Unicode big endian的区别:你吃鸡蛋时先吃小头还是先吃大头?Unicode与Unicode big endian的区别就是在编码时小头优先与大头优先的区别。“随波逐流”使用Unicode就OK了。
    我(不是程序员)这几年一直因为编码问题,感到非常困惑,查了许多资料,在国际文档的实际应用中也遇到过许多问题,所以,“感性”地总结了上述观点,不一定准确(或者说,不一定正确)。
     
    属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。 
    很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。
     
    汉字的国标码,专门用来表示汉字,是双字节编码,而英文字母和iso8859-1一致(兼容iso8859-1编码)。其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。
     
    这是最统一的编码,可以用来表示所有语言的字符,而且是定长双字节(也有四字节的)编码,包括英文字母在内。所以可以说它是不兼容iso8859-1编码的,也不兼容任何编码。不过,相对于iso8859-1编码来说,uniocode编码只是在前面增加了一个0字节,比如字母a为"00 61"。 
    需要说明的是,定长编码便于计算机处理(注意GB2312/GBK不是定长编码),而unicode又可以用来表示所有字符,所以在很多软件内部是使用unicode编码来处理的,比如java。
     
    考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。 
    注意,虽然说,但那只是相对于unicode编码来说,。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。
     
     
    在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。 
    这是java字符串处理的一个标准函数,其作用是将字符串所表示的字符按照charset编码,并以字节方式表示。注意字符串在java内存中总是按unicode编码存储的。
    这是java字符串处理的另一个标准函数,和上一个函数的作用相反,将字节数组按照charset编码进行组合识别,最后转换为unicode存储。
     
    因为utf8可以用来表示/编码所有字符,所以new String( str.getBytes( "utf8" ), "utf8" ) === str,即完全可逆。
     
    Unicode和UTF-8的关系:
    Unicode是字符集,而UTF-8则是Unicode字符集对应的计算机的存储格式。UTF-8则特指计算机内部的存储编码。
     
     
  • 相关阅读:
    Elementary Methods in Number Theory Exercise 1.3.13
    Elementary Methods in Number Theory Exercise 1.3.17, 1.3.18, 1.3.19, 1.3.20, 1.3.21
    数论概论(Joseph H.Silverman) 习题 5.3,Elementary methods in number theory exercise 1.3.23
    Elementary Methods in Number Theory Exercise 1.2.31
    数论概论(Joseph H.Silverman) 习题 5.3,Elementary methods in number theory exercise 1.3.23
    Elementary Methods in Number Theory Exercise 1.3.13
    Elementary Methods in Number Theory Exercise 1.3.17, 1.3.18, 1.3.19, 1.3.20, 1.3.21
    Elementary Methods in Number Theory Exercise 1.2.31
    Elementary Methods in Number Theory Exercise 1.2.26 The Heisenberg group
    4__面向对象的PHP之作用域
  • 原文地址:https://www.cnblogs.com/novalist/p/6398151.html
Copyright © 2020-2023  润新知