cstring m_pszdata与UNICODE中转换的字符*不匹配

cstring m_pszdata与UNICODE中转换的字符*不匹配,unicode,cjk,cstring,Unicode,Cjk,Cstring,我用Unicode MFC对话框应用程序测试了Unicode转换,我可以在编辑框中输入一些中文。读入字符后使用 DDX_TextpDX、IDC_EDIT1、m_strUnicode 更新德图 m_strUnicode的m_pszdata显示e0 65 2d 4e 1f 75 09 67。然后我使用以下代码将其转换为char*: char*psText;psText=新字符[dwMinSize]; 宽图表多字节CP_OEMCP,空,m_strUnicode,-1,psText, dwMinSize

我用Unicode MFC对话框应用程序测试了Unicode转换,我可以在编辑框中输入一些中文。读入字符后使用

DDX_TextpDX、IDC_EDIT1、m_strUnicode 更新德图

m_strUnicode的m_pszdata显示e0 65 2d 4e 1f 75 09 67。然后我使用以下代码将其转换为char*:

char*psText;psText=新字符[dwMinSize]; 宽图表多字节CP_OEMCP,空,m_strUnicode,-1,psText, dwMinSize,NULL,FALSE

psText包含ce de d6 d0 c9 fa d3 d0,与m_strUnicode的m_pszdata完全不同。有人能解释一下为什么会这样吗?

ce de d6 d0 c9 fa d3 d0是无中生有 以GBK为单位。你确定你在操纵Unicode

所以我猜你在一台中文电脑上,默认代码页是GBK


无中生有 在UTF16LE中是e0 65 2d 4e 1f 75 09 67,因此基本上您是在将UTF-16-LE字符串转换为GBK。

启动项目时,我在MFC项目设置中选择了Unicode,并且我没有输入无中生有 为了测试,假设汉字是Unicode格式。我错了吗?明白了。谢谢我用英文字母abcdef再次进行测试,效果如预期。我说的对吗?无论我输入什么字符串,如果使用UNICODE,它都将是UTF-16-LE格式,并且在转换为多字节后,它将是默认的代码页字符串格式?
CP_OEMCP instructs the API to use the currently set default OEM codepage.