5

wchar_t*Linuxを使用して UTF-16 でエンコードされたテキストを保存することは意味がありますか? 明らかな問題は、wchar_tLinux では 4 バイトであり、UTF-16 は通常、1 文字あたり 2 バイト (または場合によっては 2 つのグループ) を使用することです。

まさにそれを行うサードパーティのライブラリを使用しようとしていますが、非常に混乱しているようです。Windows では 2 バイトであるため、問題が発生しているように見えwchar_tますが、かなり高価な商用ライブラリであり、何かを理解していない可能性があるため、再確認したいだけです。

4

4 に答える 4

7

に UTF-16 を格納することは可能ですがwchar_t、そのような値 (または文字列として使用されるそれらの配列) は、文字列を受け取る、または文字列へのポインターをwchar_t使用する標準関数での使用には適していません。そのため、「理にかなっていますか...?」という最初の質問に答えるには、断固としてノーと答えます。もちろん、この目的のために使用することも、C11が利用可能な場合は C11 を使用することもできますが、C11 関数を使用して処理する場合を除き、後者が望ましい理由はわかりません (そして、それらはまだ実装されていません)。wchar_twchar_tuint16_tchar16_t

于 2012-10-12T20:03:09.200 に答える
3

http://userguide.icu-project.org/strings言う

Unicode 標準では、16 ビットのコード単位に基づくデフォルトのエンコードが定義されています。UCharこれは、符号なし 16 ビット整数型であるというの定義によって、ICU でサポートされています。これは、ICU の文字列の文字配列の基本型です。

したがって、ICU を使用している場合は、 を使用できますUChar*。そうでない場合は、uint16_tとの相互運用が必要になった場合に移行が容易になりますUChar

于 2012-10-12T19:21:41.163 に答える
1

最善の解決策はおそらくchar16_tUTF-16 を使用することです。これは標準の 16 ビット文字型であるためです。これは gcc 4.4 以降でサポートされているため、目にするほとんどの Linux システムに存在するはずです。

于 2012-10-12T19:47:10.403 に答える
0

いいえ、UTF-16 をデコードして wchar_t の配列に格納することは理にかなっています。すべての Unicode コード ポイントが UTF-16 の 16 ビット ワードを 1 つだけ持つわけではありませんが、それらはすべて wchar_t に収まります。

いずれにせよ、UTF-16 は他の何よりも悪い妥協点であり、決して使用すべきではありません。UTF-8 (ほとんどの場合、より効率的で、より一般的に使用されます) を使用するか、wchar_t[] を使用します。

于 2012-10-12T20:34:04.723 に答える