C/C++ 编程中多国语言处理(3)

在代码中调用“编码转换方法”一节里提到的函数,将 gb2312 编码的字符串转换为 UTF8 编码,分析其编码转换的行为:

在英文 Linux 环境下,执行下列命令:

export LC_ALL=zh_CN.gb2312  

然后编译并执行以下程序(其中汉字都是在 gb2312 环境中写入源文件)

L1: wstring ws = L"一"; L2: string s_gb2312 = "一"; L3: wchar_t * wcs = MBs2WChar(s_gb2312.c_str()); L4: char* cs = WChar2MBs(wcs);  

查看输出:

L1 - 1 wide char: 0x04bb L2 - 2 bytes:0xd2,0xbb,即 gb2312 编码 0xD2BB L3 - 返回的 wchar_t 数组内容为 0x4E00,也就是 Unicode 编码 L4 - 将 Unicode 再度转换为 UTF8 编码,输出的字符长度为 3,即 0xE4,oxB8,0x80

在 L1 行,执行结果显示编码为一个 0x04bb,其实这是一个转换错误,如果使用其他汉字,如“哈”,编译都将无法通过。也就是说 Linux 环境下,直接声明中文宽字符串是不正确的,编译器不能够正确转换。

而在中文 windows 下使用相同测试代码,则会在 L1 处出现区别,ws 中的 wchar_t 元素十六进制值是 0x4e00,这是汉字“一”的 Unicode 编码。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpzsd.html