gpt4 book ai didi

C++ 错误 : Conversion to Execution Character set

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:43:44 26 4
gpt4 key购买 nike

问题是我试图在 ASCII 之外打印一些字符,例如德语变音字符、“ß”等。这些字符不适合普通的 char 变量,所以显然我试图将它们放在 wchar_t 中并用 L"...."初始化字符串。但是每当这个字符串包含上面的一个字符时,我都会得到提到的错误,但是对于 ASCII 的所有其他字符都没有问题。 u"....", U"......"也会发生这种情况,如果我使用 u8"......"它不会产生错误但会打印垃圾。

所以问题:

  1. 如何从 ASCII 集之外打印这些字符和其他字符?
  2. 无论如何,这个错误是什么意思?
  3. 我可以打印字符的唯一方法是调用 setlocale() 将语言环境设置为环境默认值(德语),然后通过简单地创建一个包含这些字符的普通数组将不会产生错误并打印正确,这里的问题是为什么!!?我完全不明白为什么这现在有效,因为 char 类型的大小没有改变,所以我不认为对 setlocale() 的调用会更改默认字符集(通常为 ASCII)中的字符映射。
  4. 如果有人能就主题字符集以及如何在 C++ 和 C 中处理它们提供更多解释,那么我将不胜感激,尤其是对于 UTF-8、16、32(您不必自己编写,甚至欢迎一些其他组织良好且相对容易理解的网站,这些网站更彻底地解决了该主题)。

请求的示例:

#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 64 位)

最佳答案

我在编译最初在 Visual Studio 中编辑的多平台项目时也遇到过这个问题。 VS 使用不同的字符集(CP1252,至少在我的例子中),而 GCC 需要 UTF-8。您可以使用 -finput-charset g++ 标志来指示源代码的编码。

关于C++ 错误 : Conversion to Execution Character set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com