visual studio-C++在英文Windows中处理西里尔字母字符串

visual studio - C++ Processing Cyrillic strings in English Windows

本文关键字:字符串 处理 studio-C++ Windows visual      更新时间:2023-10-16

我编写了连接到Windows Server 2012上的Active Directory的应用程序。首先,应用程序从AD中检索组织单位的名称。然后,它从每个组织单位获取用户,对他们进行处理,并将信息发送到另一个网络应用程序。

AD中的组织单位和用户可以同时具有英文和俄文名称。

所以当我用俄语系统语言在Windows中运行我的应用程序时,一切都很好。

但是,当我试图在Windows Server(或使用英语系统语言的Windows 7)上运行它时,我会得到"?"序列,而不是俄语字符串,两者都在:中

  1. 日志文件
  2. 控制台输出
  3. Active Directory搜索字符串,其中包含组织单位的名称

在应用程序内部,我尝试使用std::stringstd::wstring来保存从Active Directory中提取的数据,得到了相同的结果——"?"而不是俄语单词。

在开发者平台上使用MSVS 2013、Windows 8.1。和libLDAP(设置版本3)连接到Active Directory。

我需要做些什么才能使我的应用程序正确处理俄语字符串?

刚刚找到解决方案
我使用函数MultiByteToWideCharWideCharToMultiBytestd::stringstd::wstring之间进行转换,始终以CP_ACP为第一参数。当我把它改成CP_UTF8时,一切都很好。

顺便说一下,我还将所有项目文件的编码更改为UTF-8,没有BOM。

@IInspectable,感谢您对的帮助