我对编程很陌生,并且在我的C++教科书中做了一些例子。我能够完成大部分的例子,但当我尝试做以下工作时,出现了一些问题:试图在类似于"Hello!“的程序上显示汉字!
最后,有一个提示弹出,说明由于我使用了非法字符,编码被更改.
发布于 2015-09-08 10:30:09
试过以下几点:
#include <iostream>
int main()
{
std::cout << "你好" << std::endl;
return 0;
}我得到了输出:
你好对我来说,这似乎是同一个角色(如果我没有看到你的不同之处,我会谦卑地道歉)。这使我认为问题在于一方面保存文件和/或编译时字符到字节的转换不匹配,另一方面执行过程中显示字节到字符的转换不匹配。
我的正确输出是在XUbuntu上使用g++ 4.8.4。cpp文件是用vim保存的,如下所示:
00000000: 23 69 6e 63 6c 75 64 65 20 3c 69 6f 73 74 72 65 #include <iostre
00000010: 61 6d 3e 0a 0a 69 6e 74 20 6d 61 69 6e 28 29 0a am>..int main().
00000020: 7b 0a 09 73 74 64 3a 3a 63 6f 75 74 20 3c 3c 20 {..std::cout <<
00000030: 22 e4 bd a0 e5 a5 bd 22 20 3c 3c 20 73 74 64 3a "......" << std:
00000040: 3a 65 6e 64 6c 3b 0a 09 72 65 74 75 72 6e 20 30 :endl;..return 0
00000050: 3b 0a 7d 0a -- -- -- -- -- -- -- -- -- -- -- -- ;.}.------------如您所见,每个字符被保存为3字节的UTF-8序列(以粗体表示的编码位):
因为有一次你有4个字符的文本,我相信这些字节实际上被编译成UTF-8很好,但随后被读取为其他的东西。如果它们被读取为UTF-16,那将尝试生成3个字符(每个字符2个字节),但这不是一个可能的场景,因为标准的创建方式可以避免这种混淆,还因为您实际上得到了4个字符,而且UTF-16不可能使用较少的汉2字节来生成一个字符。
在这一点上,我必须说,我没有足够的信息试图帮助你进一步。请考虑提供您正试图编译的确切代码,如果可能的话,还可以提供它的十六进制表示。
https://stackoverflow.com/questions/32447997
复制相似问题