【问题标题】:Unicode, UTF, ASCII, ANSI format differencesUnicode、UTF、ASCII、ANSI 格式差异
【发布时间】:2010-10-16 13:22:42
【问题描述】:

UnicodeUTF8UTF7UTF16UTF32ASCIIANSI 编码之间有什么区别?

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

【问题讨论】:

标签: unicode character-encoding ascii ansi utf


【解决方案1】:

从你的名单开始:

  • "Unicode" 不是编码,但不幸的是,许多文档不精确地使用它来引用特定系统默认使用的任何 Unicode 编码。在 Windows 和 Java 上,这通常意味着 UTF-16;在许多其他地方,它意味着 UTF-8。正确地说,Unicode 指的是抽象字符集本身,而不是任何特定的编码。
  • UTF-16:每个“代码单元”2 个字节。这是 .NET 中字符串的本机格式,通常在 Windows 和 Java 中。 Basic Multilingual Plane (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,但也可以是其他语言环境。

关于my Unicode pagetips for debugging Unicode problems 的更多信息。

另一个重要的代码资源是unicode.org,它包含的信息比你能够通过自己的方式处理的更多——可能最有用的部分是code charts

【讨论】:

  • 术语“ANSI”应用于 Microsoft 的 8 位代码页时用词不当。它们基于为 ANSI 标准化而提交的草案,但 ANSI 本身从未对它们进行标准化。 Windows-1252(最常被称为“ANSI”的代码页)类似于 ISO 8859-1 (Latin-1),除了 Windows-1252 在 0x80..0x9F 范围内具有可打印字符,其中 ISO 8859-1具有该范围内的控制字符。 Unicode 在该范围内也有控制字符。 en.wikipedia.org/wiki/Windows_code_page
  • @jp2code:我不会——但您需要区分“通过 HTTP 从 Web 服务器发回的内容”和“通过电子邮件发送的内容”。发送电子邮件的不是网页内容——大概是它背后的应用程序。网页内容最好使用 UTF-8;邮件内容可能采用 UTF-7 格式,尽管我怀疑这些天将其保留在 UTF-8 格式是可以的。
  • 对于 UTF-16,恕我直言,我会说“每个代码单元 2 个字节”,因为 BMP 之外的代码点将以代理对编码为 2 个代码单元(4 个字节)。
  • 忽略了 UTF-16LE(在 .NET 中)和 BE 之间的差异以及 BOM 的概念。
  • @Andrew:不,没有(通用)编码标记。 Windows 1252 不能表示 Unicode BOM,因为它只是一个字节/字符的编码,所以没有任何意义。
【解决方案2】:

一些读物可以帮助您开始学习字符编码:Joel on Software: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

顺便说一句 - ASP.NET 与它无关。编码是通用的。

【讨论】:

  • 在这篇文章写完 6 年后在这里回答。我在这篇文章写完 8 年后才读到它。 14 年后,它仍然是一本好书。那是我大半辈子以前的事了。难以置信。
  • 另一个类似的有用资源:youtube.com/watch?v=MijmeoH9LT4
猜你喜欢
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 2013-03-22
  • 2011-03-20
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多