2016-07-21 2 views
0

Windows Server 2012にあるActive Directoryに接続するアプリケーションを作成しました。最初にアプリケーションはADから組織単位の名前を取得します。次に、すべての組織ユニットからユーザーを取得し、それらを処理し、別のWebアプリケーションに情報を送信します。C++英語でのキリル文字列の処理Windows

組織からのユニットとユーザーは、英語とロシア語の両方で名前を持つことができます。

私はロシア語のシステム言語でWindowsで私のアプリを実行しているので、すべてgoind良いです。

しかし、Windows Server(または英語のシステム言語のWindows 7)で実行しようとしているときに、私はの "?"代わりにロシア文字列の両方で:組織単位のアプリケーションの中に

の名前が含まれてい

  1. ログファイル
  2. コンソール出力
  3. Active Directoryの検索文字列は、私はしstd::stringstd::wstringを使用しようとしましたActive Directoryのデータを抽出し、同じ結果を得ました - "?"ロシア語の代わりに。

    MSVS 2013、Windows 8.1をデベロッパースタンドで使用する。また、Active Directoryに接続するためのlibLDAP(バージョン3を設定)。

    アプリケーションでロシア語の文字列を正しく処理するには、何が必要ですか?

+1

を助けてくれてありがとうUnicodeと文字セットについて(言い訳なし!)](http://www.joelonsoftware.com/articles/Unicode.html)。あなたが使っている文字**エンコーディング**はまったく分かりませんし、明らかにあなたもどちらもありません。最初に修正する必要があります。 – IInspectable

+0

Windows 7のソリューション:[http://blooplace.eu/how-to-fix-cyrillic-text-on-windows-7/](http://blooplace.eu/how-to-fix-cyrillic-text- on-windows-7 /) – Rotem

+2

@Rotem: "解決策"は単に実際の問題を隠すだけです。それはそれを解決しません。そしてOPは、システム言語を変更すると問題が消えてしまうことをよく認識しています。文字エンコーディングを理解する必要があります。また、特定のライブラリをエンコードする文字が、ランダムな外部環境設定に依存しない真の解決策を生み出すために使用している必要があります。 – IInspectable

答えて

0

解決策が見つかりました。
私は、std::stringstd::wstringの間の変換には常にCP_ACPを第1引数として使用する関数MultiByteToWideCharWideCharToMultiByteを使用しました。私がCP_UTF8に変更したとき、すべてうまくいった。

ところで、BOMを使用しないで、すべてのプロジェクトのファイルのエンコードをUTF-8に変更しました。あなたが正に知っている必要があります、絶対に[絶対最小すべてのソフトウェア開発を読む必要がある -

@IInspectableは、「?私は自分のアプリケーションが正常にロシア文字列を処理するために行うには何が必要です」* *

関連する問題