C++编译器对字符串的编码转换.pdf
文本预览下载声明
C++编译器对字符
串的编码转换
殷海峰
2012 年07 月20 日
变更记录
变更记录
日期 作者 说 明
2012.07.18 殷海峰 完成初稿
增加了如下内容
1、研究方法;
2012.07.20 殷海峰 2 、MinGW gcc 处理 Unicode 字符串;
3、VC++6.0 处理rc 文件里的字符串;
4 、VC++.NET 对字符串的处理
I
目 录
目 录
第1 章 说明3
1.1 前言3
1.2 MinGW gcc 3
1.2.1 ANSI字符串3
1.2.2 Unicode字符串4
1.2.3 #include 4
1.3 VC++6.0 4
1.3.1 ANSI字符串5
1.3.2 Unicode字符串5
1.3.3 资源文件5
1.4 VC++.NET 5
II
第3 章 VC++9.0
第1 章 说明
1.1 前言
本文将研究C++编译器对字符串的编码转换。如下面两行代码包含了一个
ANSI 字符串和一个Unicode 字符串(也叫Wide 字符串)。编译之后,它们具
体的编码是什么?
const char* pA = 123456789 测试; //ANSI 字符串
const wchar_t* pW = L123456789 测试; //Unicode 字符串
使用UltraEdit 以二进制打开编译生成的exe 文件。找到123456789 之后就
可以查看ANSI 字符串中“测试”的编码;找到16 进制字符串 31 00 32 00
33 00 34 00 35 00 就可以查看Unicode 字符串中“测试”的编码。使用这个
方法,本文对 MinGW gcc 和 VC++ 编译器进行了研究。
1.2 MinGW gcc
在 Windows 系统下,安装 Qt Creator 2.3.1 之后,MinGW 4.4.0 就被自动
安装,其安装目录一般位于:C:\Qt\qtcreator-2.3.1\mingw 。
1.2.1 ANSI 字符串
MinGW gcc 4.4.0 编译器对ANSI 字符串的编码原则:保持其在源文件里
的原始编码,不做任何转换。
举例说明:对于Test.cpp 里的字符串测试。如果Test.cpp 的编码是ANSI
的,则测试就是ANSI 编码;如果Test.cpp 的编码是UTF-8 的,则测试就
是UTF-8 编码。编译器生成exe 的时候,仅仅在它们后面增加一个字符\0 。也
就是说同样的字符串测试,会因为Test.cpp 的编码不同而不同。同样的代码s
tr
显示全部