C++感受4-HelloWorld中文版——认识编码

 及时了解“编码”对编写代码的影响,是中国程序员越早知道越好的知识点。

  1. 一分钟了解什么叫“编码”和“解码”;
  2. 通过实际演示,充分理解中文Windows下,C++源代码编码需要注意的地方;
  3. 通过 -finput-charset=utf8 等 g++ 编译配置,实现在Windows下使用utf8编码源文件;
  4. 编写需跨平台编译的C++代码的更多方案

1. C++源文件中的汉字编码问题

由于历史原因,Windows (中文版)系统默认的文字编码为中国国家标准,比如 GB18030。

国标文字编码对汉字和英美字母等支持得比较好,但对同样需要特殊编码的其他国家的文字,就力不从心了,比如日本,韩国等。遇到需在同一个文档(比如同一个 cpp 源文件)中,包含以上多个国家的文字,相关支持亦发捉襟见肘。

如果所写的C++源代码,需要在 Windows、MacOS、Unix、Linux 等多个操作系统下编译,那么,需要为C++源文件,考虑选择合理编码。

考虑现状,当前主流操作系统,除Windows系统以外,各种Unix/Linux以及MacOS对多国的文字的支持,基本都只使用一种方案:UNICODE。UNICODE 编码自身又有多种表达,其中 utf-8 可以比较好兼容非常早之前的,纯英文字符的 C/C++源代码。因此,跨平台的 C++ 源代码编码方案,通常使用 utf-8 编码 (再辅之于C++支持的编码转换手段)。

Windows 控制台默认对本地编码(中文Windows下即为GB18030等编码)支持较好,因此,在C++源代码中,直接使用 utf-8 编码的汉字字符串,输出到控制台会显示为乱码。

视频中演示了一种使用utf-8编码C++源代码,且能在 Windows 控制台内正常显示汉字的方法:设置编译器 (g++) 编译选项:

  1. -finput-charset=utf8
  2. -fexec-charset=gbk

第一项告知 g++ 编译器,当前源文件编码为 utf-8,第二项要求 g++ 编译器,生成可执行文件时,将 utf-8编码的 内容转换为 gbk 编码。

显然,当同一份源代码改为在 Linux 等系统下继续使用 g++ 编译时,只需去除以上第2个配置项即可;因为 Linux 等系统的默认编码即为 utf-8。

事实上,第一个配置项也可以去除,因为 g++ 也默认源代码使用的是 utf8 编码。

2. 课堂视频

ffls07-HelloWorld-中文版

上一篇:机器学习——模型融合:Stacking算法