Dummy的Unicode指南

时间:2009-09-21 14:58:29

标签: unicode utf-8 utf-16 codepages

任何人都可以给我一个简洁的定义

  • 的Unicode
  • UTF7
  • UTF8
  • UTF16
  • UTF32
  • 代码页
  • 它们与Ascii / Ansi / Windows 1252的区别

我不是在维基百科链接或令人难以置信的细节之后,只是一些关于Unicode的巨大变化如何以及为何出现的简要信息以及为什么你应该关心程序员。

6 个答案:

答案 0 :(得分:21)

答案 1 :(得分:12)

如果您想要真正的简介: Unicode in 5 Minutes

或者如果你在追逐单行:

  • Unicode:字符到整数(“代码点”)的映射,范围为0到1,114,111;涵盖几乎所有正在使用的书面语言
  • UTF7:代码的编码指向高位清零的字节流;一般不使用
  • UTF8:代码的编码指向字节流,其中每个字符可能需要一个,两个,三个或四个字节来表示;应该是您编码的主要选择
  • UTF16:代码的编码指向字流(16位单位),其中每个字符可能需要一个或两个字(两个或四个字节)来表示
  • UTF32:代码的编码指向32位单元的流,其中每个字符只占一个单位(四个字节);有时用于内部代表
  • Codepages: DOS和Windows系统,其中字符分配给整数,以及相关的编码;每个只涵盖一部分语言。请注意,这些分配通常与不同而不是Unicode分配
  • ASCII:一个非常常见的字符到整数的分配,以及直接编码为字节(所有高位清除);赋值是Unicode的子集,编码是UTF-8的子集
  • ANSI:标准组织
  • Windows 1252:常用的代码页;它类似于ISO-8859-1或Latin-1,但不一样,两者经常混淆

为什么要关心?因为在不知道正在使用的字符集和编码的情况下,您实际上并不知道给定字节流表示的字符。例如,字节0xDE可以编码

  • Þ(LATIN CAPITAL LETTER THORN)
  • fi(LATIN SMALL LIGATURE FI)
  • (希腊小写字母ETA与TONOS)
  • 或其他13个字符,具体取决于所使用的编码和字符集。

答案 2 :(得分:7)

除了经常引用的Joel之外,我还有my own article从.NET中心的角度来看它,只是为了变化......

答案 3 :(得分:4)

答案 4 :(得分:3)

是的,我得到了一些见解,但这可能是错的,但是这有助于我理解它。

我们来看一些文字吧。它作为一系列字节存储在计算机ram中,代码页只是您和我读取的字节和字符之间的映射表。所以像记事本这样的东西带有它的代码页,并将字节转换到你的屏幕,你会看到一堆垃圾,颠倒的问号等。这并不意味着你的数据只是乱码只是读取字节的应用程序没有使用正确的代码页。有些应用程序在检测正确的代码页时比其他应用程序更聪明,内存中的某些字节流包含代表字节顺序标记的BOM,这可以声明要使用的正确代码页。

UTF7,816等都是使用不同格式的不同代码页。

使用不同代码页存储为字节的相同文件将具有不同的文件大小,因为字节的存储方式不同。

它们与Windows 1252没有什么不同,因为那只是另一个代码页。

为了更好的答案,请尝试其中一个链接。

答案 5 :(得分:2)

其他人已经指出了足够好的参考资料。我没有列出真正的虚拟指南,而是列出了Unicode Consortium页面的一些指示。您将在Unicode Consortium页面中找到使用不同编码的更多实质性原因。

Unicode FAQ是一个很好的回答一些(不是全部)查询的地方。

关于为什么存在Unicode的更简洁的答案出现在Newcomer's section of the Unicode website本身:

  

Unicode为其提供唯一编号   每个角色,无论是什么   平台,无论什么程序,   无论用什么语言。

就使用UTF-8,UTF-16或UTF-32的技术原因而言,答案在于Technical Introduction to Unicode

  

UTF-8很受HTML和类似的欢迎   协议。 UTF-8是一种方式   转换所有Unicode字符   进入可变长度编码   字节。它的优点是   对应的Unicode字符   熟悉的ASCII集具有相同的功能   字节值为ASCII,以及Unicode   转换成UTF-8的字符可以   与许多现有软件一起使用   没有广泛的软件重写。

     

UTF-16在许多环境中很受欢迎   需要平衡有效访问   经济使用的人物   存储。它相当紧凑   所有使用频繁的角色都适合   同时进入一个16位代码单元   所有其他角色都可以访问   通过成对的16位代码单元。

     

UTF-32在内存空间很受欢迎   没关系,但固定宽度,单一   代码单元访问字符是   期望。每个Unicode字符都是   以单个32位代码单元编码   使用UTF-32时。

     

最多需要三种编码形式   每个4字节(或32位)数据   字符。

一般的拇指规则是当您的应用程序支持的主要语言在印度河以西,UTF-16用于对面(印度河东部)时使用UTF-8,当您担心时使用UTF-32关于利用统一存储的字符。

顺便说一句,UTF-7不是Unicode标准,主要用于邮件应用程序。