【问题标题】:Use of word with accent give an error使用带重音的单词会出错
【发布时间】:2015-01-05 16:52:39
【问题描述】:

我正在使用 WinAPI 在 C++ 中创建一个简单的程序,请参见下面的代码:

CreateWindowW(L"STATIC", L"Portão", WS_CHILD | WS_VISIBLE, 10, 10, 100, 20, hwnd, (HMENU)ID_LABEL1, NULL, NULL);

上面的代码是在主窗体上创建一个静态控件,问题是第二个参数使用了一个带重音的巴西葡萄牙语单词(Portão表示Gate),报错,报错:

C:\CBProjects\ListF\main.cpp|46|error: converting to execution character set: Invalid argument|

我使用的是宽字符(wchar_t*),但是如果我将“Portão”替换为“Portao”(没有重音),它就可以正常工作,为什么?我该如何解决这个问题?

我正在使用带有 MinGW 编译器的 Code::Blocks IDE。

【问题讨论】:

  • 那个字符可能是一个扩展的 Unicode 字符,编译器拒绝它。查找其 Unicode 值并在字符串中以\x0000 的形式指定。 stackoverflow.com/questions/442735/…
  • 尝试使用对 Windows 开发不太陌生的编译器。 Visual Studio Express 2013 for Windows Desktop 可能是更好的选择。
  • @xxbbcc 字符实际上是\xe3(或C++11 中的\u00e3)。但这是一种解决方法,而不是真正的解决方案。编译器应该能够将源输入转换为正确的 Unicode 字符。
  • @MarkRansom 我的意思是我的评论是一个通用解决方案,适用于任何 Unicode 字符。 (我应该写 \u0000 而不是 \x... 但我不能再编辑评论了。)我不知道那个特定的字符,但我不认为这是一种解决方法 - 编译器不需要在编译期间识别随机字符。如果文件未保存为 UTF-8,则该字符可能会根据文件的字符集被误解。
  • 在visual studio中它工作得很好,但是我如何将当前表单转换为mingw中的\x0000形式?

标签: c++ winapi character-encoding


【解决方案1】:

C++ 有源字符集和执行字符集的概念。基本上源字符集是关于带有代码的文件中的字符,而执行字符集是关于编译器中的内部字符串表示。 请查看this堆栈溢出问题以了解有关此主题的更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2010-11-29
    • 2013-01-02
    • 2022-12-14
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    相关资源
    最近更新 更多