到处都是提供了一个强有力的理由:完全避开微软的TCHAR、_T()、LPCTSTR等等,把wchar_t也推到一边,勇敢地接受一个基于窄char类型的UTF-8字符串的世界。
这似乎很好,直到我来到MFC DDX_Text()宏,以便在编辑控件中和外部获取一个CString。是否有任何合理的办法:
CStringA myString声明为UTF-8字符串(或将ASCII/ANSI字符串声明为退化情况)UNICODE定义编译myString通过适当的转换和/或临时变量传递到第三个参数到DDX_Text(),并从相关的编辑控件获得合理的结果?如果不是,如果应用程序想要使用UTF-8 (或者在退化情况下使用ASCII/ANSI ),您建议如何通过编辑控件处理字符串输入/输出?
(P.S.这是因为Visual 2013鼓励只使用Unicode的MFC。考虑到MFC应用程序和使用VS2013的愿望,这需要定义UNICODE .或者坚持一种不受欢迎的做事方式。
发布于 2015-03-24 04:38:22
Windows内部使用UTF-16作为UNICODE标准。因此,您必须遵循这一点,并使用CString,它在UNICODE中被定义为CStringW。此外,还必须使用_T()宏。所有Windows常用控件,如编辑框、列表框等,都在使用UNICODE。
我建议只使用UTF-8来建立关系网。
// UTF8转换
CStringA CUtility::UTF16toUTF8(const CStringW& utf16)
{
return CW2A(utf16, CP_UTF8);
}
CStringW CUtility::UTF8toUTF16(const CStringA& utf8)
{
return CA2W(utf8, CP_UTF8);
}https://stackoverflow.com/questions/29222362
复制相似问题