关于字符编码:Unicode,UTF,ASCII,ANSI格式差异

Unicode, UTF, ASCII, ANSI format differences

UnicodeUTF8UTF7UTF16UTF32ASCIIANSI编码有什么区别?

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


在您的列表中:

  • "unicode"不是一种编码,但不幸的是,许多文档不精确地使用它来引用特定系统默认使用的任何一种unicode编码。在Windows和Java上,这通常意味着UTF-16;在许多其他地方,它意味着UTF-8。正确地说,Unicode指的是抽象字符集本身,而不是任何特定的编码。
  • UTF-16:每个"代码单元"2个字节。这是.NET中字符串的本机格式,通常是在Windows和Java中。基本多语言平面(BMP)之外的值被编码为代理项对。(这些都是相对很少使用的——这是一个很好的工作,因为很少有开发人员能正确使用它们,我怀疑。我很怀疑我会这么做。)
  • UTF-8:可变长度编码,每个码位1-4字节。使用1字节将ASCII值编码为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.org,它包含的信息比您一路工作所能获得的信息还要多——可能最有用的一点是代码图表。


一些关于角色编码的阅读:Joel关于软件:绝对最小值每个软件开发人员绝对,肯定必须知道Unicode和字符集(没有借口!)

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