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
来定义...或者坚持使用一种弃用的做事方式。)
答案 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);
}