是什么之间的区别Unicode
,UTF8
,UTF7
,UTF16
,UTF32
,ASCII
,和ANSI
编码?
这些对程序员有什么帮助?
列出你的清单:
" Unicode "不是一种编码,但遗憾的是,许多文档都不精确地使用它来引用特定系统默认使用的任何Unicode编码.在Windows和Java上,这通常意味着UTF-16; 在许多其他地方,它意味着UTF-8.正确地,Unicode指的是抽象字符集本身,而不是任何特定的编码.
UTF-16:每个"代码单元"2个字节.这是.NET中字符串的本机格式,通常在Windows和Java中.基本多语言平面(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但可以是其他语言环境.
我的Unicode页面上有更多内容以及调试Unicode问题的提示.
另一个重要的代码资源是unicode.org,其中包含的信息比您能够通过的信息更多 - 可能最有用的是代码图表.
一些阅读让你开始编写字符编码: Joel on Software:绝对最低每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)
顺便说一下 - ASP.NET与它无关.编码是普遍的.