Unicode, UTF, ASCII, ANSI format differences
Unicode、UTF8、UTF7、UTF16、UTF32、ASCII和ANSI编码有什么区别?
这些对程序员有什么帮助?
- 型最好的参考站点是:msdn.microsoft.com/en-us/library/dd374081(vs.85).aspx
- 型非常相关:UTF-8与Unicode
- 型tugay.biz/2016/07/what is ascii and unicode and character.ht‌&8203;ml
- 型什么是unicode、utf-8、utf-16?,utf-8和unicode有什么区别?
在您的列表中:
- "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,它包含的信息比您一路工作所能获得的信息还要多——可能最有用的一点是代码图表。
- 我实际上把ansi看作代码页437,正如ansi艺术使用的那样。但是,我不认为它在ASP.NET中可用
- 当术语"ansi"应用于微软的8位代码页时,是一个误称。它们是基于为ANSI标准化提交的草稿,但ANSI本身从未对它们进行标准化。Windows-1252(最常用的代码页称为"ansi")与ISO 8859-1(拉丁语-1)相似,但Windows-1252的可打印字符范围为0x80..0x9f,其中ISO 8859-1的控制字符范围为该范围。Unicode在该范围内也有控制字符。en.wikipedia.org/wiki/windows_code_页
- @琼斯基特,我有一些网页可以发送电子邮件。目前他们使用的是UTF8。我应该考虑把它们改回UTF7吗?
- @jp2code:我不会-但您需要区分"通过HTTP从Web服务器发回的内容"和"通过电子邮件发送的内容"。发送电子邮件的不是网页内容——大概是它背后的应用程序。Web内容最好是UTF-8格式;邮件内容可以是UTF-7格式,尽管我怀疑现在用UTF-8格式保存是可以的。
- 由于这个问题不再提到ASP.NET Anywhere(经过一段时间前的编辑),我将答案重构为类似的平台不可知论。特别是,上面的注释是re:utf-16!=unicode不再有意义了。
- UTF-7是由诸如IMAP之类的协议级编码授权的,但在您自己选择编码的地方没有理由使用它。在电子邮件中,越来越多的系统只是在电子邮件正文中使用charset="utf-8",可能与Content-Transfer-Encoding: quoted-printable甚至base64一起使用,以确保编码的电子邮件是7位干净的。在有限的系统中,你知道所有的东西都是8位干净的,当然没有必要这样做。
- 对于UTF-16,imho,我会说"每代码单元2个字节",因为BMP之外的代码点将以2个代码单元(4个字节)的形式编码在代理项对中。
- @克蒂:同意并解决了,谢谢。
- 忽略了utf-16le(在.NET中)和be之间的区别以及BOM的概念。
- u表示unicode。utf代表unicode转换格式,所以所有utf都是unicode的某种类型(编码)。
- 如果只存在ASCII字符,那么ASCII和WP-1252编码文件之间有什么区别吗?一旦将扩展字符引入到不能以ASCII格式显示的文件中,是否向该文件添加了一个BOM以明确标识为wp-1252,或者只是依赖扩展字符的msb进行标识?
- @安德鲁:不,没有(通用)编码标记。Windows1252不能代表unicode的bom,而且它也没有意义,因为它只是一个每字符一字节的编码。
一些关于角色编码的阅读:Joel关于软件:绝对最小值每个软件开发人员绝对,肯定必须知道Unicode和字符集(没有借口!)
顺便说一句,ASP.NET与此无关。编码是通用的。
- 非常有用的阅读,谢谢!
- 在这篇文章写完6年后回答了这个问题。这篇文章写完8年后我就读了。14年后,它仍然是一本好书。那是我半辈子以前的事了。简直不可思议。
- 精彩的文章!很高兴看到作者在创建stackoverflow之前做了其他的好事…