C++ 处理英文西里尔字符串 Windows

C++ Processing Cyrillic strings in English Windows

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

来自 AD 的组织单位和用户可以有英文和俄文名称。

因此,当我使用俄语系统语言 运行 在 Windows 中安装我的应用程序时,一切都很好。

但是当我尝试在 Windows 服务器(或使用英语系统语言的 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 时一切正常。

顺便说一句,我也把所有项目文件的编码都改成了没有BOM的UTF-8。

@IInspectable,谢谢你的帮助