问题在于我试图在ASCII之外打印一些字符,如德语变音字符,'ß'等。这些字符不适合普通的char变量,所以显然我试图将它们放在wchar_t中并用L“.....”初始化字符串。但是每次这个字符串包含上面的字符时,我都会得到上面提到的错误,但是对于ASCII的所有其他字符它都没问题。这也发生在u“....”,U“......”,如果我使用u8“.....”它不会产生错误但会打印垃圾。
所以问题:
请求示例:
#include <iostream>
#include <string>
using namespace std;
int main()
{
wstring x = L"öäüß" ;
wcout << x ;
return 0 ;
}
这会打印错误。
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main(void)
{
setlocale(LC_ALL,""); // sets locale to german on my computer
string x = "äöüß" ;
cout << x ;
return 0 ;
}
这很正常。 但即使在更改区域设置后,如果我创建第一个代码,也会生成错误。
注意:我注意到在C ++(而不是C)中,即使不包含除iostream之外的任何文件,其他文件的所有内容(如字符串或语言环境或标准库中的任何其他内容)都是在std命名空间中声明的。我暂时忽略了这一点,仍然包含文档文件,但为什么会发生这种情况。 (我使用的是tdm-gcc 64bit)
答案 0 :(得分:2)
在编译最初在Visual Studio中编辑的多平台项目时,我也遇到了这个问题。 VS使用不同的字符集(CP1252,至少在我的情况下),而GCC期望UTF-8。您可以使用-finput-charset
g ++标志来指示源代码的编码。