C++设计:设计支持Unicode消息以及ASCII消息
C++ design : Design to support Unicode msg as well as ASCII msg
目前我的代码有CString DisplayMessage
,我的代码正在使用它在客户端和服务器之间交换DisplayMessage
。现在,随着软件的国际化,我希望DisplayMessage
具有Unicode字符串消息。
我发现的一种技术是
-
创建:
Class CDisplayMessage{ CString ASCIIMsg; CStringW UnicodeMsg; bool IsUnicode; ... };
ASCII消息是必需的,这样我就可以使消息向后兼容。
-
将
CString DisplayMessage
的数据类型替换为CDisplayMessage DisplayMessage
。 -
然后需要改变所有使用它的地方(这更令人头疼)。用法如下:
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);
}
相关文章:
- boost::进程间消息队列引发错误
- 在线编译器中的分段C++没有打印消息
- C++错误消息*成员参考.**初学者*
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 如何通过参数抛出错误消息
- 从服务器传输到客户端的消息不会出现
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- ROS2 动态消息模板
- C++秘密消息学校作业
- glad 导致 glfwSwapBuffers 返回错误消息
- C++入门 5 版:类消息和文件夹
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 有没有办法通过使用十进制 ASCII 代码自动类型扣除来获取字符?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- ascii 和 unicode 在处理级别有什么区别吗?
- C++设计:设计支持Unicode消息以及ASCII消息