简体   繁体   中英

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

I'm trying to add "static text component" (simple label) with UTF-8 encoding text into my windows application. If I use the designer tool in visual studio 2017 and put the text through properties - everything looks just fine - after opening the .rc file, the text is different (bad encoding).

I read that I need to change the encoding of the file to utf-8 with bom , but I have nothing like it there... If I change the file encoding to CP1252, the program cannot compile - so I'm using Unicode (UTF-8 with signature) - Codepage 65001 now.

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

this code will do this:

so it does 2 different things in the title and label.

and this code works only for the title & messageboxes

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

Why is it so complicated? Is it not possible to normally use utf8 text? Can anyone help me solve this problem? Thanks!

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

In fact, it was very simple.

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

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

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

and that's it :D

and also this , it was very helpful and good to understand what was going on there!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM