Encoding 为什么有不同的编码类型?

Encoding 为什么有不同的编码类型?,encoding,character-encoding,Encoding,Character Encoding,这是一个noob问题,但我想知道为什么会有不同的编码类型以及它们之间的区别(如ASCII、utf-8和16、base64等)。我认为原因很多,但主要的一点是:“需要显示(编码)多少字符?”例如,如果你住在美国,你可以使用ASCII。但在许多国家,我们需要像ä、å、ü等这样的字符(如果只有ASCII码,或者你试图将此文本解读为ASCII编码的文本,你会在ä、å和ü的地方看到一些奇怪的字符)。想想中国、日本、泰国和其他“异国”国家。你在世界各地看到的照片上那些奇怪的数字可能只是字母,而不是漂亮的图片

这是一个noob问题,但我想知道为什么会有不同的编码类型以及它们之间的区别(如ASCII、utf-8和16、base64等)。

我认为原因很多,但主要的一点是:“需要显示(编码)多少字符?”例如,如果你住在美国,你可以使用ASCII。但在许多国家,我们需要像ä、å、ü等这样的字符(如果只有ASCII码,或者你试图将此文本解读为ASCII编码的文本,你会在ä、å和ü的地方看到一些奇怪的字符)。想想中国、日本、泰国和其他“异国”国家。你在世界各地看到的照片上那些奇怪的数字可能只是字母,而不是漂亮的图片

至于不同编码类型之间的差异,您需要查看它们的规范。这是UTF-8的一些东西

我不熟悉UTF-16。以下是一些关于差异的信息

当需要对二进制数据进行编码时,可以使用Base64。二进制数据需要通过设计用于处理文本数据的媒体进行存储和传输。如果您曾经使用PHP制作过某种电子邮件系统,那么您可能遇到过Base64

简而言之:支持计算机程序的用户界面本地化到许多不同的语言。(编程语言仍然主要由ASCII编码中的字符组成,尽管例如在Java中可以在变量名中使用UTF-8编码,并且源代码文件通常存储为ASCII编码文本以外的内容,例如UTF-8编码。)

简而言之,第二卷:当不同的人试图从某个特定的角度解决某个问题时(如果可能的话,甚至没有角度),结果可能会截然不同。引用Joel的unicode文章(链接如下):“因为字节最多可以容纳8位,所以很多人会想,“天哪,我们可以将代码128-255用于我们自己的目的。”问题是,很多人同时有这个想法,他们有自己的想法,从128到255空间中应该有什么。”

感谢Joachim和tchrist提供的所有信息和讨论。这里有两篇我刚刚读过的文章。(两个链接都在我之前链接的页面上。)自从几年前我最后一次阅读乔尔的文章以来,我已经忘记了乔尔文章中的大部分内容。我希望对这个主题有很好的介绍。马克·戴维斯更深入一点


    • 主要原因是能够显示更多字符。当互联网刚刚起步时,没有人真的提前计划过,以为有一天会有来自世界各地所有国家和所有语言的人使用它。所以一个小字符集就足够了。渐渐地,它被发现是有限的和以英语为中心的,因此需要更大的字符集

      有这么多变体的真正原因是出现得太晚了

      起初,内存和存储是昂贵的,使用超过8位(有时仅7位)的内存来存储单个字符被认为是多余的。因此,几乎所有文本都是使用每个字符7或8位来存储的。显然,8位内存不足以表示所有人类语言的字符。它几乎不足以表示一种语言中使用的大多数字符(对于某些语言来说,这甚至是不可能的)。因此,设计了许多不同的字符编码,以允许不同语言(英语、德语、希腊语、俄语等)以每个字符8位的形式对文本进行编码。毕竟,一个文本文件(通常甚至是一个计算机系统)只能用一种语言,对吗

      这导致了一种情况,即没有统一的字符到任何类型的数字的映射。许多不同的、不兼容的解决方案,在这些解决方案中没有真正的中央控制。一些计算机系统被使用,另一些计算机系统被使用(或者更准确地说:EBCDIC的众多变体之一),(或者它的众多衍生物之一)或者现在几乎听不到的一大串编码中的任何一种

      最后,Unicode联合会着手完成了生成单一映射的任务(以及有用但超出此答案范围的大量辅助数据)

      当Unicode联盟最终产生了一个计算机可能代表的相当全面的字符列表(以及根据您的具体需要将它们编码为二进制数据的许多编码方案)时,其他字符编码方案已经被广泛使用。这大大减缓了Unicode及其编码(UTF-8、UTF-16)的采用


      现在,如果您想表示文本,最好使用少数几种可以表示所有Unicode字符的编码之一。UTF-8和UTF-16加在一起应该足以满足99%的所有用例,UTF-32几乎涵盖了所有其他用例。需要明确的是:所有UTF-*编码都可以对所有有效的Unicode字符进行编码。但是由于UTF-8和UTF-16是可变宽度编码,它们可能并不适合所有用例。除非您需要能够与无法处理这些编码的遗留系统进行交互,否则现在很少有理由选择其他任何东西。

      ahhh,为了支持其他语言的字符,thanksI会说“计算机使用”而不是“互联网”。人们希望使用母语的计算机程序(Word、Photoshop、Thunderbird等等)。我(再次)编辑了我的答案以强调本地化点。@Coola你写的完全错了。Unicode不仅仅是“非英语”字符。它包括许多排字员和校对员、数学家和物理学家、语言学家和词典编纂者使用的专业字符,甚至是100%的英语