C++设计:设计支持Unicode消息以及ASCII消息

C++ design : Design to support Unicode msg as well as ASCII msg

本文关键字:消息 ASCII Unicode 支持 设计 C++      更新时间:2023-10-16

目前我的代码有CString DisplayMessage,我的代码正在使用它在客户端和服务器之间交换DisplayMessage。现在,随着软件的国际化,我希望DisplayMessage具有Unicode字符串消息。

我发现的一种技术是

  1. 创建:

    Class CDisplayMessage{
           CString ASCIIMsg;
           CStringW UnicodeMsg;
           bool IsUnicode;
           ...
    };
    

    ASCII消息是必需的,这样我就可以使消息向后兼容。

  2. CString DisplayMessage的数据类型替换为CDisplayMessage DisplayMessage

  3. 然后需要改变所有使用它的地方(这更令人头疼)。用法如下:

    DisplayMessage = some other CString;
    DisplayMessage = "sdfsdf";
    

问题:

有人能建议我提供一些其他解决方案或改进我的解决方案吗,这样他们在所有其他地方都能做最小的改变。

注意:

  • 平台:MS VISUAL STUDIO(Windows),C++
  • 字符集:多字节字符集(无法更改)

如果需要,我只需使用CStringW并转换为CStringA。请注意,CString取决于_UNICODE设置。因此,如果定义了UNICODE,它将编译为CStringW,如果定义MBCS则编译为CStringA

转换非常简单:

CStringW sTestW( L"Test" );
CStringA sTestA( "Test" );
// ASCII <-> UTF16
CStringW sConvertW = sTestA;
CStringA sConvertA = sTestW;
// UTF16 <-> UTF8
CStringA CUtility::UTF16toUTF8(const CStringW& utf16)
{
    return CW2A(utf16, CP_UTF8);
}
CStringW CUtility::UTF8toUTF16(const CStringA& utf8)
{
    return CA2W(utf8, CP_UTF8);
}