如何让旧的VC++ 6.0MFC程序在TextBox或MessageBox中读取和显示UTF8?优选地,不破坏当前写入其中的任何文件读取和显示(相当重要)。
我在CString strStr中读入一行代码,然后使用以下代码:
int nLengthNeeded = MultiByteToWideChar(CP_UTF8,0,strStr,1024,0,0);
wchar_t * pWCMessage = new wchar_t[ nLengthNeeded ];
MultiByteToWideChar(CP_UTF8,0,strStr,1024,pWCMessage,nLengthNeeded);
nLengthNeeded = MultiByteToWideChar(CP_UTF8,0,"Error Title",50,0,0);
wchar_t * pWCTitle = new wchar_t[ nLengthNeeded ];
MultiByteToWideChar(CP_UTF8,0,"Error Title",50,pWCTitle,nLengthNeeded);
MessageBoxW(NULL,pWCMessage,pWCTitle,MB_ICONINFORMATION);
我仍然不确定如何将其放入文本框中,但事实证明我无论如何都不需要这样做。
发布于 2009-01-13 09:47:04
我觉得这不会有什么帮助,但这是一个起点...我假设它不“只是工作”,而且我不认为你想要尝试去摆弄那些古怪的代码页,这些代码页可能会得到你想要的,也可能得不到。
直接使用MultiByteToWideChar(CP_UTF8,...)怎么样?将其转换为utf16,然后调用这些函数的W版本(或为项目定义UNICODE/_UNICODE )。
我知道这将适用于MessageBox,我无法想象文本框不支持unicode。
如果需要将输出返回到UTF8,只需使用WideCharToMultiByte()即可。
发布于 2009-01-13 09:37:05
发布于 2009-01-13 09:50:37
首先使用MultiByteToWideChar接口将utf8字符串转换为宽字符串,并为代码页参数传递CP_UTF8。如果您的应用程序是在定义了_UNICODE的情况下编译的,则现在可以将宽字符串传递到textbox。
但是,如果您的应用程序被编译为MBCS应用程序,则必须使用WideCharToMultiByte将宽字符串转换回MBCS,并将CP_ACP作为代码页参数传递。
https://stackoverflow.com/questions/439915
复制