2011-08-20 55 views
0

ANSI与UTF-8相比似乎有限,但它是Notepad ++中的默认文件编码,所以我想知道。对于源代码文件编码,ANSI是否比丰富的编码系统(如UTF-8)有任何优势?

+0

在源代码中使用除ASCII以外的任何其他内容的人应该被拍摄并触发。您可能认为ANSI或UTF-8是有意义的,但它不会,除非语言规范指定了编码。字符串和whatnots **必须被外化,否则你的代码库就是一个笑话。许多人会不同意,但是在混合的OS/IDE /“文本编辑器”等环境中,如果您的源代码不仅仅是ASCII,那么您正在**求大麻烦。如果** ANY **源文件不是用于没有强制执行特定文件编码的语言的ASCII文件,我自己编写了脚本,使编译失败。 – SyntaxT3rr0r

+0

诚实地说,当我看到人们有*“源文件编辑/解析/构建脚本”*与文件编码有关的问题时,我不知道我是否应该笑或哭。问题的根源很简单:如果您使用的是**任何内容**,但是没有元数据,则该语言未指定您要烘烤的编码**。就那么简单。 – SyntaxT3rr0r

+0

请注意,一些语言,如Google的Go,如果我没有弄错,在spec(!)UTF-8中指定为必需的文件编码。在那种情况下,在这种情况下,只有非ASCII是好的。但是,您不能在ANSI或UTF-8或EBCDIC之间“选择”:使用语言规范指定的内容。 – SyntaxT3rr0r

回答

3

好吧,如果你可以编码在ANSI一切(无论ANSI恰好意味着您的计算机上,它是一个可怕的含糊的字眼),那么它可能是UTF-8短。对于非ASCII字符,ANSI编码仍然可以将每个字符编码为单个字节,而在UTF-8中它们需要更多字节。

这是一个很小的优势虽然和缺点是显著IMO - 我会肯定使用UTF-8去。

1

严格地说,“好处”可能是因为使用它可能会占用更少的字节,因为有许多字符在ANSI的一个字节中编码,而在UTF-8中有两到三个字符。例如,弗洛林,mdash,ndash,时代符号和一些重音罗马字母。

在Windows API中有本地操作,可能会更快。

虽然放弃了很多,但限制了自己的256个字符,而不是UTF-8的100万以上。

1

Expading上Jon的答案:

为UTF-8编码的空间要求,因为萃取Wikipedia's UTF-8 article和格式化/略微组合:

  1. 所以第128(范围[0, 0x7f])字符(US-ASCII)需要一个字节。
  2. 接下来的1,920(范围[0x80,0x07ff])字符需要两个字节进行编码。 ...
  3. 基本多语言平面(其中几乎包含所有常用字符)的其余部分(范围为[0x0800,0xffff])需要三个字节。
  4. Unicode的其他平面中的字符需要四个字节,其中包括不常见的CJK字符和各种历史脚本。

寻找在ANSI to Unicode mapping可以看出一半的ANSI字符(ASCII集)使用Unicode(1个字节编码),数超过127也落入[0,0x7FF] Unicode的范围内的值的对准(2字节),并且在0x07ff(需要3个字节以UTF-8编码)映射到Unicode上的常用值较少。现在

,至于为什么是默认的编码方式 - 跟记事本++作者:)

编码愉快。