MFC,Unicode和DDX_Text

时间:2015-03-23 23:31:26

标签: c++ unicode utf-8 mfc

UTF-8 everywhere提出了一个强有力的理由来完全避开微软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),您会如何建议通过编辑控件处理字符串输入/输出?

(PS这是由Visual Studio 2013鼓励仅使用MFC的。仅鉴于MFC应用程序,并且希望使用VS2013,这需要UNICODE来定义...或者坚持使用一种弃用的做事方式。)

1 个答案:

答案 0 :(得分:2)

Windows内部使用UTF-16作为UNICODE标准。所以你必须遵循它并使用在UNICODE中定义为CStringW的CString。你还必须使用_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);
}