Unicode,UTF,ASCII,ANSI格式差异

时间:2009-03-31 06:02:25

标签: unicode character-encoding ascii ansi utf

UnicodeUTF8UTF7UTF16UTF32ASCII和{{1}之间有什么区别?编码?

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

2 个答案:

答案 0 :(得分:438)

列出你的清单:

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

答案 1 :(得分:62)

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

顺便说一下 - ASP.NET与它无关。编码是普遍的。