代码文件编码设定

近期同事问到了这个问题,顺便记录一下。首先代码文件的编码和两个地方有关,一是文件本身的编码,二是编译器设置接受的编码。这里两个地方只要对应起来就可以了。

文件本身编码好处理,在不同的 IDE 中新建的文件默认的编码格式可能各有不同,只要记得检查并改成需要的编码就可以了。另一是处理已有的代码,可以使用脚本自动处理成想要的编码。

TODO: 补上对应的 python 代码

另外一个是编译器的编码设置。不同编译器有不同设置,Linux 和 UNIX 基本都是使用 utf-8 作为系统默认编码,相应的 gcc, clang 等也是使用 utf-8 作为默认编码的。在不跨平台的情况下,这两个系统一般是不会遇到文件编码问题的。

需要注意的是 Windows 下。MSVC 使用的编码设置是系统设定的本地语言和 utf-8 bom。虽然Windows的机内码是 utf-16 le。顾及是为了兼容早期程序和全球化吧,表层的编码使用的是本地编码。例如中国地区用的是 gbk。这时候如果代码文件本身是 utf-8编码的,就有可能出现错误,因为 utf-8 的范围比 gbk 大,有识别不了的字符。而代码文件是 utf-8 bom 开头的就没问题,因为 utf-8 bom 编码的文件,文件开头有固定的标示符,可以直接识别出来,gbk 和 utf-8 就不能直接区分开来。

在跨平台的情况下,应该采取代码统一用 utf-8 编码,然后工程设置里指定编译器使用 utf-8 编码。例如 CMakeLists.txt 中输出目标为 MSVC 时应该增加 add_compile_options(/utf-8)