这是一个noob问题,但我想知道为什么有不同的编码类型和他们有什么区别(即ASCII,UTF-8和16,基数64等)
Answer 1:
原因是多方面的,我相信,但主要问题是:“你有多少个字符需要显示(编码)” 如果你住在美国为例,你可以去用ASCII很远。 但是,在许多县,我们需要像A,A,ü等字符(如SO只是ASCII或尝试读取这个文本作为ASCII编码的文字,你会看到一个,A和U的地方一些奇怪的字符。 )想想也对中国,日本,泰国等“舶来品” countires。 照片上那些奇怪的数字,你可能已经在世界各地看到的只可能是字母,而不是漂亮的图片。
对于不同的编码类型之间的差异,你需要看到他们的规范。 这里的东西为UTF-8。
- http://www.unicode.org/standard/standard.html
- http://www.utf-8.com/
- http://en.wikipedia.org/wiki/UTF-8#Compared_to_other_multi-byte_encodings
我不熟悉的UTF-16。 以下是关于差异的一些信息。
- http://en.wikipedia.org/wiki/Unicode
- http://en.wikipedia.org/wiki/Unicode_plane
当有需要编码需要存储和调过来的,旨在处理文本数据媒体的二进制数据的Base64使用。 如果你曾经做电子邮件系统的somesort用PHP,你可能遇到的Base64。
- http://en.wikipedia.org/wiki/Base64
- http://www.phpeveryday.com/articles/PHP-Email-Using-Embedded-Images-in-HTML-Email-P113.html
短:支持计算机程序的用户界面本地化到许多不同的语言。 (编程语言仍主要由在ASCII编码中的字符,althought这是可能的,例如在Java中使用的变量名UTF-8编码,和源代码文件通常被存储为比ASCII编码文本别的东西,例如UTF- 8编码。)
总之册:总是在不同的人正试图从一个特定的角度解决一些问题(甚至没有一个角度来看,如果它甚至有可能),结果可能会完全不同。 从乔尔的unicode的文章(以下链接)引用:“因为字节有空间多达八位,很多人开始思考,‘天哪,我们可以使用代码128-255为我们自己的目的,’麻烦的是,很多。的人有过这种想法的同时,他们有自己的什么应该去的地方在空间从128至255点子”
由于约阿希姆和tchrist所有的信息和讨论。 这是我刚才读两篇文章。 (两条链路我联系到前面的页面上。)我忘记了大部分的乔尔的文章的东西,因为我最后一次读它在几年前。 好介绍的主题,我希望。 马克·戴维斯去得更深一些。
- http://www.joelonsoftware.com/articles/Unicode.html
- http://www.icu-project.org/docs/papers/forms_of_unicode/
Answer 2:
真正的原因,为什么有这么多的变种是Unicode联盟一起为时已晚来了。
在开始时存储器和存储装置是昂贵的,并且使用的存储器来存储一个单独的字符多于8(或有时仅7)位被认为是过多的。 因此,几乎所有的文本是每个字符使用7位或8位存储。 显然,8位是没有足够的内存来代表所有的人类语言的字符。 这是仅够代表一种语言 最常用的字符(有些甚至语言那是不可能的)。 因此,许多不同的字符编码,其中设计,让不同的语言(英语,德语,希腊语,俄语,...)来编码其文本中每个字符8位。 毕竟一个文本文件(通常甚至在单个计算机系统)将在一个单一的语言只使用过的,对不对?
这导致了一个情况下,没有单一商定字符映射到任何类型的数字。 许多不同的,不兼容的解决方案,在那里生产,没有真正的中央控制存在。 一些计算机系统中使用的ASCII ,其他人使用EBCDIC (或者更确切地说:EBCDIC的许多变化中的一个), ISO-8859- * (或其许多衍生物之一)或任何几乎不听说现在编码的大名单。
最后,Unicode协会加大了对任务产生单一的映射(有很多是非常有用的辅助数据一起,但这个答案的范围之外)。
当Unicode联盟终于生产出一台计算机可能代表(连同一些编码方案给他们以编码的二进制数据,根据您的具体需要)字符的相当全面的名单,其他字符编码方案已经被广泛使用。 这放慢了采用Unicode和其编码(UTF-8,UTF-16)相当的。
这些天,如果你要来表示文字,最好的办法是使用一些编码可以表示所有Unicode字符中的一个。 UTF-8和UTF-16一起应该能满足所有用例的99%,UTF-32几乎涵盖了所有的人。 而仅仅是明确的:所有的UTF-*编码可以编码所有有效的Unicode字符。 但由于这样的事实,UTF-8和UTF-16是可变宽度的编码,他们可能不适合于所有用例。 除非你需要能够与遗留系统无法处理这些编码进行交互,很少有一个理由去选择别的这些天。
Answer 3:
最主要的原因是能够显示更多的字符。 当互联网在它的初期,没有人真的提前计划想着总有一天,会有人用它从所有国家和世界各地的所有语言。 因此,一个小的字符集是不够好。 渐渐地显露是有限的,英语为中心,从而为更大的字符集的需求。