字符编码

rec*_*gle 2 python ansi utf-8 utf-16

我的文本编辑器允许我使用几种不同的字符格式Ansi,UTF-8,UTF-8(无BOM),UTF-16LE和UTF-16BE进行编码.

他们之间有什么区别?

什么通常被认为是最好的格式(我使用Python,如果这是一个差异)?

Joa*_*uer 8

  • "Ansi"是用词不当,通常是指某些8位编码,这是当前平台的默认编码(在"西方"Windows安装中,通常是Windows-1252).它只支持一小组字符(最多256个字符).
  • UTF-8是一种可变长度的ASCII兼容编码,能够存储任何和所有Unicode字符.对于西方文本来说,这是一个非常好的选择,它应该支持所有Unicode字符,并且在一般情况下是一个非常可行的选择.
  • "UTF-8(无BOM)"是Windows在不编写字节顺序标记的情况下使用UTF-8的名称.由于UTF-8 不需要 BOM ,因此不应该使用它,这是正确的选择(几乎所有人都称这个版本为"UTF-8"!).
  • UTF-16LE和UTF-16BE是UTF-16编码的Little Endian和Big Endian版本.作为UTF-8,UTF-16能够表示任何Unicode字符,但它不与ASCII兼容.

一般来说,UTF-8是一个很好的整体选择,具有广泛的兼容性(只是确保不要编写BOM,因为这是大多数其他软件所期望的).

如果您的大多数文本由非ASCII字符组成(即不使用基本的拉丁字母),UTF-16可以占用更少的空间.

只有当您特别需要与不支持Unicode的遗留应用程序进行交互时,才应使用"Ansi".

关于任何编码的一个重要事项是它们是除了数据之外还需要传送的元数据.这意味着您必须知道某些字节流的编码才能将其正确地解释为文本.所以,你应该要么使用该文档实际使用的编码格式(XML这里是一个最好的例子)规范在一个单一的编码在给定的范围内,并且只使用.

例如,如果您启动一个软件项目,那么您可以指定所有源代码都在给定的编码中(再次:我建议使用UTF-8)并坚持下去.

特别是对于Python文件,有一种方法可以指定源文件的编码.