C++ C++;错误:转换为执行字符集

C++ C++;错误:转换为执行字符集,c++,c,string,C++,C,String,问题是,我试图打印ASCII以外的一些字符,如德语umlaut字符、“ß”等。这些字符不适合普通的char变量,所以很明显,我尝试将它们放入一个wchar\u t中,并用L“…”初始化字符串。但是每次这个字符串包含上面的一个字符时,我都会得到上面提到的错误,但是对于ASCII的所有其他字符都没有问题。这也会发生在u“…”,u“…”,如果我使用u8“…”,它不会生成错误,而是打印垃圾 关于这些问题: 如何打印此字符和ASCII集合之外的其他字符 这个错误到底是什么意思 我可以打印字符的唯一方法是调

问题是,我试图打印ASCII以外的一些字符,如德语umlaut字符、“ß”等。这些字符不适合普通的char变量,所以很明显,我尝试将它们放入一个wchar\u t中,并用L“…”初始化字符串。但是每次这个字符串包含上面的一个字符时,我都会得到上面提到的错误,但是对于ASCII的所有其他字符都没有问题。这也会发生在u“…”,u“…”,如果我使用u8“…”,它不会生成错误,而是打印垃圾

关于这些问题:

  • 如何打印此字符和ASCII集合之外的其他字符
  • 这个错误到底是什么意思
  • 我可以打印字符的唯一方法是调用setlocale()将区域设置为环境默认值(德语),然后简单地创建一个包含这些字符的普通数组,它将不会生成错误并正确打印,这里的问题是为什么!!? 我完全不明白为什么现在可以这样做,因为字符类型的大小没有改变,所以我不认为对setlocale()的调用会改变默认字符集中字符的映射(通常是ASCII)
  • 如果有人能在C++和C中对主题字符集和如何处理它们做一点解释,那么我将非常感谢,尤其是使用UTF-8,16, 32(你不必自己写,即使是其他一些组织良好、相对容易理解的网站,如果能更彻底地解决这个问题,也是非常受欢迎的) 请举例说明:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        wstring x = L"öäüß" ;
    
        wcout << x ;
    
        return 0 ;
    }
    
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    wstring x=L“öäüß”;
    
    wcout在编译最初在Visual Studio中编辑的多平台项目时,我也遇到了这个问题。VS使用不同的字符集(至少在我的例子中是CP1252),而GCC需要UTF-8。您可以使用
    -finput charset
    g++标志指示源代码的编码。

    您可能需要创建一个示例来说明您的问题,并包括生成错误或实际和预期的输出。我包括了示例。
    #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 ;
    }