Unicode, UTF, ASCII, ANSI格式的差异

UnicodeUTF8UTF7UTF16UTF32ASCIIANSI编码之间的区别是什么?

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

330564 次浏览

一些阅读让你开始字符编码:乔尔谈软件: 每个软件开发人员绝对、肯定必须知道Unicode和字符集(没有借口!)

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

下面是你的清单:

  • "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库的一部分,如果你想要它。(请注意,它并没有经过非常彻底的测试。)
  • 美国信息交换标准代码:只使用底部7位的单字节编码。(Unicode代码指向0-127。)没有口音等等。
  • ANSI:没有固定的ANSI编码——有很多。通常当人们说“ANSI”时,他们指的是“我的系统的默认语言环境/代码页”,它是通过编码。默认的获得的,通常是windows - 1252,但也可以是其他语言环境。

有更多关于我的Unicode页面调试Unicode问题的技巧的内容。

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