0

私は元々Windows専用のコードをクロスプラットフォーム対応のコードに移植しています。1つの特定の障害は、Windows Unicode関数「GetMultiByteString」(および関連する関数)への呼び出しを、より移植性の高いwcharベースの関数に変換しようとしています。Unicode文字列を反復処理しようとすると、wcharを使用するとループが途中で終了するため、ほとんど成功していません。

GetMultiByteStringおよびその他の関連するUnicode関数を置き換えるためにwcharを使用する正しい方法は何ですか?

4

1 に答える 1

1

ここでリンゴをオレンジに変換しようとしています。MultiByteToWideCharとWideCharToMultiByteは、特定のエンコーディング、UTF-16<->ANSIを含む他のさまざまなエンコーディング間で変換します。

3つの問題:

  1. C標準ライブラリのchar<->wchar_t関数が動作するエンコーディングは、実装によって定義されます。これは、UCS-2とASCII、EBDIC、またはその他の任意の数のコードページの間で変換できます。wcstombsとmbstowcsが実際にUTF-16について話している、または実際にASCIIについて話していると想定できないため、windows関数をこれらに置き換えることはできません。通常、彼らが使用する実際のエンコーディングは、UNIXボックスのUTF-32です。
  2. UnixボックスはUTF-16を認識しないことがよくあります。ユニコードをサポートしている場合は、すべてUTF-8ベースです。
  3. wchar_t通常、UNIXボックスでは2バイトではなく4バイトであるため、すべてのコードをチェックして、コードのサイズが2バイトであると想定されていないことを確認する必要があります。

簡単に言えば、自分でエンコードを行うコードを書かない限り、これらの種類のものを処理する完全に移植可能な方法はありません。

移植性を持たせたい場合は、アプリケーションがWindowsでwchar_tを使用し、その他すべてでcharを使用するように、typedefなどを定義する必要があります。次に、UTF-16がWindowsボックスで使用されており、UTF-8がUNIXボックスで使用されていると想定する必要があります。

または:ICUなどのライブラリを使用する必要があります。

于 2010-07-26T20:13:25.907 に答える