《白话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
- 《白话C++》第3章 感受(一) 3.2 Hello world 中文版
- 《白话C++》第3章 感受(一) 3.1 Hello world 经典版
- 《白话C++》第3章 感受(一) 3.3 Hello world 函数版
- 《白话C++》第3章 感受(一) 3.3 Hello world 交互版
- 第3章 感受(一)——3.2. Hello world 中文版
- 第3章 感受(一)——3.1. Hello world 经典版
- 第3章 感受(一)——3.3. Hello world 函数版
- 第3章 感受(一)——3.4. Hello world 交互版
- 第3章 感受(一)——3.5. Hello world 分支版
- 第3章 感受(一)——3.6. Hello world 循环版
- 第3章 感受(一)——3.7. Hello object 生死版
- 第3章 感受(一)——3.8. Hello object 成员版
- 第3章 感受(一)——3.9. Hello object 派生版
- 第3章 感受(一)——3.10. Hello object 多态版
- 第3章 感受(一)——3.11. Hello object 封装版
- 第3章 感受(一)——3.12. Hello STL 向量篇
- 第3章 感受(一)——3.13. Hello STL 列表篇
- 第3章 感受(一)——3.14. Hello STL 算法篇
- 虔诚无价
- 破解版
- 假如生活欺骗了你……——网上答疑(14)
- 虔诚无价
- 在线提交邮箱
- 《白话C++》第3章 感受(一) 3.2 Hello world 中文版
- Apache的FileUpload组件
- c++中为什么有不能重载的运算符(摘录)
- 推荐一篇文章——预防堕落的三个秘方
- C#学习纪要(11):7月22日
- 序列标签与BIO编码
- 解答:一个嵌入式新手找工作最经常遇到的困惑
- 倡导新惠农政策 构建美好新生活
- 城乡一体教育为先