VC++ MFC应用程序中如何使用UTF-8编码

How to use UTF-8 encoding in VC++ MFC application

我正在尝试将带有 UTF-8 编码文本的 "static text component"(简单标签)添加到我的 windows 应用程序中。如果我在 visual studio 2017 中使用设计器工具并通过属性放置文本 - 一切看起来都很好 - 打开 .rc 文件后,文本不同(编码错误)。

我读到我需要将文件的编码更改为 utf-8 和 bom,但我没有类似的东西...如果我更改文件编码到 CP1252,程序无法编译 - 所以我正在使用 Unicode(带签名的 UTF-8)- 代码页 65001 现在。

SetWindowTextA("ěščřžýáíé");
GetDlgItem(IDC_SERIAL_NUMBER_TITLE)->SetWindowTextA("ěščřžýáíé");

此代码将执行此操作:

因此它在标题和标签中做了 2 件不同的事情。

并且此代码仅适用于标题和消息框

CStringA utf8 = CW2A(L"ěščřžýáíé", CP_UTF8);
CStringW utf16 = CA2W(utf8, CP_UTF8);
MessageBoxW(0, utf16, 0, 0);

为什么这么复杂?是不是不能正常使用utf8文本? 谁能帮我解决这个问题?谢谢!

您必须将 .rc 文件编码保存为 Unicode - 代码页 1200

其实很简单

// from:
SetWindowTextA("ěščřžýáíé");

// to
SetWindowTextW(m_hWnd, "ščřžýáí");

// also 
// std::string -> std::stringw
// CString -> CStringW
// etc.

就是这样 :D

还有 this,了解那里发生的事情非常有帮助和好处!