Unicode、UTF、ASCII、ANSI格式的区别

398

Unicode、UTF8、UTF7、UTF16、UTF32、ASCII 和 ANSI 编码有何不同?

这些编码对程序员有什么帮助?


最好的参考网站是: http://msdn.microsoft.com/en-us/library/dd374081(VS.85).aspx - RamSri
6
非常相关:UTF-8 vs Unicode - Tobias Kienzler
http://www.tugay.biz/2016/07/what-is-ascii-and-unicode-and-character.html - Koray Tugay
什么是Unicode、UTF-8、UTF-16? UTF-8和Unicode有什么区别? - phuclv
2个回答

546

按照您的清单进行说明:

  • "Unicode" 不是一种编码方式,尽管不幸的是,许多文档将其不准确地用来指代特定系统默认使用的任何 Unicode 编码方式。在 Windows 和 Java 中,这通常意味着 UTF-16;在其他许多地方,它意味着 UTF-8。正确地说,Unicode 指的是抽象字符集本身,而不是任何特定的编码方式。
  • UTF-16:每个“代码单元”占用 2 个字节。这是 .NET 中字符串的本机格式,通常也适用于 Windows 和 Java。位于基本多文种平面(BMP)之外的值将被编码为代理对。这些代理对过去相对较少使用,但现在许多消费类应用程序需要了解非 BMP 字符以支持表情符号。
  • UTF-8:可变长度编码,每个代码点使用 1 至 4 个字节。ASCII 值使用 1 个字节编码为 ASCII。
  • UTF-7:通常用于邮件编码。如果您认为需要使用它而且不是在处理邮件,那么您可能错了。(这只是我在新闻组等地方的经验-在邮件之外,它真的不太被广泛使用。)
  • UTF-32: 固定宽度编码,每个码点使用4字节。虽然不是很高效,但在BMP范围之外比较方便。如果您需要的话,我有一个 .NET Utf32String 类,它是我MiscUtil库的一部分(注意,它的测试可能不是非常全面)。
  • ASCII:单字节编码,仅使用最低的7位(Unicode代码点0-127)。没有重音等。
  • ANSI:并不存在一个固定的ANSI编码 - 有很多种编码。通常当人们说“ANSI”时,他们指的是“我的系统的默认区域设置/代码页”,这可以通过Encoding.Default获得,并且通常是Windows-1252,但也可以是其他区域设置。
  • 更多关于Unicode的信息请参见我的Unicode页面调试Unicode问题的技巧

    另一个重要的代码资源是unicode.org,其中包含了比您能够处理的信息更多 - 可能最有用的部分是代码图表


    9
    “ANSI”这个术语在应用于微软的8位代码页时是一个误称。它们基于提交给ANSI标准化的草案,但ANSI本身从未对它们进行标准化。Windows-1252(通常被称为“ANSI”的代码页)类似于ISO 8859-1(Latin-1),唯一的区别是Windows-1252在0x80..0x9F范围内有可打印字符,而ISO 8859-1在该范围内有控制字符。Unicode也在该范围内有控制字符。 - Keith Thompson
    1
    @jp2code:我不会这样做,但你需要区分“通过HTTP从Web服务器返回的内容”和“通过电子邮件发送的内容”。发送电子邮件的不是网页内容,而是其背后的应用程序。Web内容最好使用UTF-8;邮件内容可以使用UTF-7,尽管我认为现在将其保留在UTF-8中也没问题。 - Jon Skeet
    3
    对于UTF-16,我个人认为应该说“每个代码单元2个字节”,因为超出BMP的代码点将被编码为代理对,即2个代码单元(4个字节)。 - Ludovic Kuty
    1
    错过了UTF-16LE(在.NET中)和BE之间的差异以及BOM的概念。 - Maarten Bodewes
    2
    @Andrew:不,没有(通用的)编码标记。Windows 1252不能表示Unicode BOM,并且它也没有意义,因为它只是一种每个字符一个字节的编码方式。 - Jon Skeet
    显示剩余11条评论

    80

    14
    在文章撰写后6年的现在,我在阅读它,而这篇文章是在8年前发表的。14年过去了,但仍然是一篇很棒的阅读材料。这已经超过了我的一半人生。令人难以置信。 - Dave Knise
    1
    另一个类似有用的资源:https://www.youtube.com/watch?v=MijmeoH9LT4 - vulcan raven

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接