0

入力としてを取得する関数がありwchar_t*ます。この関数では、コード ポイントを処理する必要があります。

このプログラムは複数のプラットフォームで実行する必要があるため、wchar_t*.

wchar_t*からchar32_t*viaへの変換を取得しようとしましたstd::codecvt<char32_t, wchar_t, std::mbstate_t>。残念ながら、この専門分野は存在しないようです。

wchar_t*次に、を への読み取り専用入力バッファとして単純に使用できるのではないかと考えましたが、最初に を介しicu::UnicodeStringて に変換する必要があるようです。しかし、ここでも最初に、適切な量のコード単位でバッファーを割り当てる必要があります。UChar*u_strFromWCSUCharUChar

コードポイントにアクセスする最も効果的な方法は何か教えてもらえますかwchar_t*?

例:

私が間違っていなければ、次の例ではコード ポイントごとに 2 つのコード単位を使用する必要があります。

const wchar_t *test = L"A  剝Ц B";
4

2 に答える 2

1

標準では、エンコーディングなどについてほとんど何も述べwchar_tていないため、いくつかの仮定を行わずに解決策を見つけることはできません。

妥当な仮定としては、sizeof(wchar_t) == 2(Windows の場合) の場合は UTF-16 であり、sizeof(wchar_t) == 4(Unix の場合) の場合は UTF-32 であるため、マクロまたはテンプレートを使用してコンパイル時にどちらを選択するかを選択できます。wchar_tエンコーディングを自動的に検出する一般的な方法がないため、何かがレガシー エンコーディングでエンコードされる可能性がある場合は、別の場所でエンコーディング情報を取得する必要があります。

于 2014-04-27T13:46:28.277 に答える