《白话C++》第3章 感受(一) 3.2 Hello world 中文版

来源:互联网 发布:淘宝网内增高鞋 编辑:程序博客网 时间:2024/05/16 03:38

3.2.Hello world 中文版

“Hello world”中文版是一个小小的插曲。作为一个中国人,怎么可以不用充满魅力的方块字来向世界问声好呢?

(背景歌声响起:“北京欢迎你,像音乐感动你……”)。

3.2.1.理解“编码”及“字符集”

  • 编码

不过,要向控制台输出一些汉字,这里面有个重要的问题。我们曾经说过,在计算机中,一切数据最终都是用二进制数表示的。这里倒不是二进制出什么问题了,无论 是二进制,还是十进制,表达的都是“数”。因此,具体到“汉字”这件事,问题就出来了,比如,“庄”这个汉字,在计算机,是用“55215”来表达呢?还 是用“15711167”好呢?

结论是:一个生活中的字符,在计算机用什么数值来表达呢,这就叫做“编码”问题。

  • 字符集

正好相反,当程序得到一大串数字,它是在表达一段汉字呢?还是一段朝鲜文字?这叫“字符集”问题。

3.2.2.问题与解决

中文版的Windows操作系统,它的控制台通常是采用一种名为“GBK”的编码。而我们用来写代码的Code::Blocks,则采用名为“utf-8” 的编码。如此,当我在Code::Blocks里写代码时,输入一个“庄”字,实际保存的可能是“15711167”这个数字,可以是这个数输出到 Windows的控制台时,它却会把它“翻译”成一个古怪的汉字:“搴”,甚至干脆就“译”不出来。

解决办法很多,今天我们采用最简单的办法。Code::Blocks其实支持多种编码,我们把main.cpp文件的编码,也改成GBK即可。不想跟Windows的控制台怄气。

  • 新建项目

请使用Code::Blocks向导,新建一个控制台应用,项目名称为“HelloWorldCn”。

如果您之前没有关闭第一个版本的HelloWorld,那么,现在Code::Blocks会同时打开两个项目,此时您可以通过双击来激活指定项目:如下图:

(图 11 激活指定项目)

〖危险〗:确认所修改的文件隶属于活动项目

由于本例子每个项目的源文件都取名为main.cpp。因此,在本例,以及后面更多的Hello World例子中,请多加小心,一定认清你正在修改的main.cpp,是属于当前活动的项目;否则,您可能会惊讶地发现,无论如何修改源代码,编译后的程序却不受影响。

 

  • 修改文件编码

确定main.cpp文件当前采用的编码是什么,方法是查看用Code::Blocks打开main.cpp文件时,查看此时的状态栏,如下图:

(图 12 查看源代码当前编码:UTF-8.)

如果您看到的是“UTF-8”,那就需要更改,请进行下一步。

请点击主菜单“编辑”→“文件编码”→“系统默认”。本步完成后,状态栏显示当前编码为“WINDOWS-936”(GBK的别名)。

(图 13修改后的源文件编码:WINDOWS-936)

  • 修改代码

完成以上步骤,我们现在可以放心地修改007行的代码了:

cout << "你好,世界!" << endl;

记得重新编译:Ctrl + F9。然后运行。结果如下:

(图 14 你好,世界!)

〖小提示〗:UTF-8 VS. GBK

同样这份代码,如果要在Linux编译,可能就需要再次将编码改回UTF-8。注意一个细节:同样是“庄”字,utf-8用一个远大于GBK编码值的整数表 示。事实上,utf-8编码对应到一个非常大的字符集,这个“大字符集”包括了西方字符、汉字简体、汉字繁体、日语等等。而GBK则只能表达西方字符以及 2万多个汉字。

 

从这点考虑,如果您在同一个源代码文件中,又要用到汉字,又要用到日语,GBK编码就无法胜任。这种情况下,我们就得别想办法来避免和中文版Windows控制台怄气了。

 

-------------------------------------

如果您想与我交流,请点击如下链接成为我的好友:
http://student.csdn.net/invite.php?u=112600&c=f635b3cf130f350c