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

我发现的一种技术是


创建:

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


ASCII msg是必需的,这样我就可以使消息向后兼容。
CDisplayMessage DisplayMessage的数据类型替换为。
然后需要更改使用它的所有位置(这更让人头疼)。用法就像:

DisplayMessage = some other CString;

DisplayMessage = "sdfsdf";



题:

任何人都可以建议我提供其他解决方案或改进我的解决方案,以便他们在所有其他地方所做的更改最小。

注意:


平台:MS VISUAL STUDIO(Windows),C ++
CharSet:多字节字符集(不能更改)

最佳答案

我将简单地使用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);
}

关于c++ - C++设计:支持Unicode消息和ASCII消息的设计,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29511887/

10-10 13:06