【问题标题】:Getting errors when setting a wstring to a Hebrew string literal in Code Blocks在代码块中将 wstring 设置为希伯来语字符串文字时出错
【发布时间】:2017-07-08 17:56:00
【问题描述】:

我正在使用代码块来编写 C++ 程序。我想在 std::wstring 类型中添加一个希伯来语字符串,但它不起作用。

如果我这样写:

std::wstring str2("שלום");

并编译,它给了我这个错误:

error: no matching function for call to 'std::basic_string<wchar_t>::basic_string(const char [5])'|

如果我在字符串文字前使用“L”,即

std::wstring str2(L"שלום");

然后它给出了错误:

error: converting to execution character set: Invalid argument|

【问题讨论】:

  • 如果你用L表示它是一个wchat_t,你是否包含了
  • 不要在程序源代码中使用非 ascii 字符串,它不可移植、依赖于实现并且无论如何都是不好的做法。说了这么多,你的源文件用的是什么编码?
  • 我不知道我使用什么编码,我使用代码块和编译器 GNU GCC
  • 与这些字符对应的 unicode 中的 16 位值是什么?您在使用时对 wchar_t 字符串的运行时编码是什么? (我希望是 unicode!Utf-32?Utf-16?Ucs-2?)您可以将转义序列放入 L"" 字符串并让它工作。

标签: c++ character-encoding hebrew string-literals wstring


【解决方案1】:

宽字符串文字的形式为L"peace"。前导 L 告诉编译器它是 wchar_t 而不是 char

见:http://en.cppreference.com/w/cpp/language/string_literal

【讨论】:

  • 当我这样做时,它会给我其他错误:错误:转换为执行字符集:无效参数|
  • @רועינוה 为此,请参阅:stackoverflow.com/questions/30190173/…
  • 欢迎来到 Stack Overflow!
【解决方案2】:

我明白了。

我在喜欢之前使用 L:str2 (L"שלום");

通过依次单击设置、编辑器和编码设置来设置 CodeBlocks 编辑器,然后选择 UTF-8。您可能想要选择“作为默认编码”并取消选择其他所有内容。您不必将 -finput-charset 传递给编译器,因为 UTF-8 是默认值

【讨论】:

  • 不要使用 iso-8859-8。像世界上 99% 的人一样使用 UTF-8。通过依次单击设置、编辑器和编码设置来设置 CodeBlocks 编辑器,然后选择 UTF-8。您可能想要选择“作为默认编码”并取消选择其他所有内容。您不必将 -finput-charset 传递给编译器,因为 UTF-8 是默认值。
  • אתה תמיד מוזמן。另请阅读this
  • @רועינוה:如果您已接受使用 UTF-8 的建议,请相应地修改您的答案。推荐使用 iso-8859-8 确实是个坏主意。
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2012-01-12
相关资源
最近更新 更多