383

Unicode, UTF8, UTF7, UTF16, UTF32, ASCII, 和ANSI编码有什么区别?

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

4

2 回答 2

516

往下看你的清单:

  • 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 之外的生活更轻松。我有一个 .NETUtf32String类作为我的MiscUtil库的一部分,如果你想要的话。(请注意,它没有经过非常彻底的测试。)
  • ASCII:仅使用低 7 位的单字节编码。(Unicode 代码点 0-127。)没有重音符号等。
  • ANSI:没有固定的 ANSI 编码——有很多。通常当人们说“ANSI”时,他们的意思是“我系统的默认语言环境/代码页”,它是通过Encoding.Default获得的,通常是Windows-1252,但也可以是其他语言环境。

我的 Unicode 页面上还有更多关于调试 Unicode 问题的提示

另一个重要的代码资源是unicode.org,它包含的信息比您能够通过自己的方式工作的更多——可能最有用的部分是代码图表

于 2009-03-31T06:15:04.150 回答
77

一些读物让您开始了解字符编码: Joel on Software:每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

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

于 2009-03-31T06:10:06.970 回答