【发布时间】: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