簡體   English   中英

Visual C++ - UTF-8 - CA2W 后跟帶有 MBCS 的 CW2T - 可能是個壞主意?

[英]Visual C++ - UTF-8 - CA2W followed by CW2T with MBCS - Possibly a bad idea?

我正在使用一個以const char*類型生成 UTF-8 空終止字符串的庫。 例子包括:

MIGUEL ANTÓNIO
DONA ESTEFÂNIA

我想將這兩個const char*類型轉換為CString以便它們讀取:

MIGUEL ANTÓNIO
DONA ESTEFÂNIA

為此,我正在使用我制作的以下功能:

CString Utf8StringToCString(const char * s)
{
    CStringW ws = CA2W(s, CP_UTF8);
    return CW2T(ws);
}

該功能似乎可以做我想做的事情(至少對於這兩種情況)。 但是,我想知道:使用 CA2W 宏然后使用 CW2T 是個好主意嗎? 我這樣做是在進行某種有損轉換嗎? 有什么副作用我應該擔心嗎?

其他一些細節:

  1. 我正在使用 Visual Studio 2015
  2. 我的應用程序是使用使用多字節字符集編譯的

即使您的應用程序被編譯為 MBCS,您仍然可以毫無問題地使用 Unicode 字符串、緩沖區和 Windows Unicode API。

使用原始指針( const char* )或字符串類(如CStringstd::string )將字符串作為 UTF-8 傳遞。 當您實際需要呈現字符串以供顯示時,請轉換為 Unicode 並顯式使用W API。

例如:

void UpdateDisplayText(const char* s)
{
    CStringW ws = CA2W(s, CP_UTF8);
    SetDlgItemTextW(m_hWnd, IDC_LABEL1, ws);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM