请教:linux和utf-8编码的关系
个人对uft-8的编码形式非常讨厌,因为它是一种语言歧视的编码规范,在这种编码规范下,英文字符可以获得一个字节的编码,而代价就是其它语言的字符要用多位来表示,比如一个汉字字符就需要3个字节来表示。个人觉得就是一种歧视。这一点老外也承认:Let's address the problem first: UTF-8 is kind of racist. It allows us
round-eye paleface anglophone types to tuck our characters neatly into one byte, lets most people whose languages are headquartered west of the Indus river get away with two bytes per, and penalizes India and points east by requiring them to use three bytes per character.
我在查文档的过程中好像看到未来linux平台的编码要统一到uft-8这个标准上来。想请教各位这样是不是意味着处理非英文字符时,占用的资源要更多呢?对linux还不是太熟悉,编程的时候看见过windows2000以后的windows内核是以utf-16为编码标准的,旧的ascci函数都要转换成unicode版本来执行。在uft-16中,主要的字符编码都是统一的16位。那么照这样类比的话,采用utf-8的linux处理中文字符串时占用的内存会不会时windows下的1.5倍呢(因为utf-8的汉字编码是三个字节),如果是中文版本的linux环境占用内存和占用硬盘空间会不会比英文版的要大的多。
个人对linux很欣赏,但对utf-8非常讨厌,所以想搞清楚它们之间的关系,和基于utf-8编码的linux对非英语国家的用户是否也会继承这种语言歧视性呢? 呵呵,朋友你不要把内码和表示码给混淆了。我想提个问题:unicode 和 utf-8之间的差别何在? unicode的编码方案是以31位的长度来表示世界上可以说所有的字符,实际上就是以4个字节来为字符编码,每一个字符都拥有一个独立的32位unicode编码。
但这只是原始的字符编码,在实际的存储和网络传输的过程中,字符采用特殊的二次编码方式以节省空间和带宽,这种特殊的二次编码可以理解位压缩算法,一般成为uft编码。
如果统一以32位来为字符编码,则不需要任何的字符转换机制,处理字符串时也不需要任何特殊的处理机制,这种32位的二次编码成为utf-32,这种编码的缺点就是占用的空间太大,不利于存储和传输。
前面提到的uft-8编码方案就是贝尔实验室的某人发明的,这种算法最像压缩算法,按它的编码方案,原来的ascii字符仍可以用一个字节来表示,西欧字符用两个字节来表示,而东亚文字用三个字节来表示,以此类推,最高可能要用6个字节来表示一个稀有字符。从这种算法的核心可以看出,非ascii字符都被当成了非常用字符,ascii字符仍能保持一个字节编码的优势是以牺牲其它语言为代价的。在处理以ascii字符为内容的文档时,自然效率很高,但如果我们用来处理汉字的话,效率会降低,同时占用的存储空间时ascii码的三倍,所以说utf-8是一种语言歧视的编码。
个人最欣赏的时utf-16,这种编码的核心就是所有常用的语言都用16位的编码来表示,这样处理起来非常方便,效率要比uft-8高,如果有稀有字符不在uft-16的编码范围内的话,utf-16提供了一种策略使得这个稀有字符仍可以用32位来表示。总体来说utf-16兼顾了公平性和效率。是一种值得我们非英语国家应该支持的二次编码方案。 呵呵,老兄,这个我当然知道。可是不要动不动就说"语言歧视", 要考虑整体效率。这样的公平带来的是空间的浪费。那个老外说的应该只是一句笑话而已。 LZ讨厌utf-8是有道理的,但是LZ可能就存在语言歧视。想一想使用16位表示一个英文字母的情况吧。
在不能歧视英文之前,先忍着吧,继续使用UTF-8。 只说汉字,当然 utf16 效率更高,可是咱们中国人也不是只用汉字不用字母啊。而且想想吧,内存或硬盘的空间里到底有多少是存的文字信息啊?大部分都是电影吧,呵呵~~~~ :twisted:
别的语言不知道,只说汉语和英语的话,应该注意到,一个汉字传递的信息肯定比三个字母多啊。所以就算是 1:3,汉字也在占着便宜呢。
想没有语言歧视,就得用这么一种编码:不论用什么语言,一样多的字节表达的信息也都是一样多的。──要真这样的话,那每个汉字的字节数更得多呢。
页:
[1]