目前,我的代码中有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/