4

v8::Stringこれらのドキュメントによると)この目的のためのC++ APIがないように思われるため、ネイティブNode.jsモジュールでのUnicode文字列処理にICUを使用することを検討しています。

私の知る限り、V8 は inExternalStringResourceおよびその他の API で UTF-16 を想定しているため、UTF-16 処理には ICU を使用したいと考えています。
私は特にする必要があります:

  • UTF-16 文字列の文字 (16 ビット コード単位だけでなく) を反復処理する
  • UTF-16 文字列に含まれる文字数 (16 ビット コード単位だけでなく) を伝える

そこで、ICU のドキュメントを調べたところ、UnicodeStringCharacterIteratorクラスが見つかりました。ただし、メソッドはなくUnicodeString、andのみです。fromUTF16fromUTF8fromUTF32

私が確信していないもう1つのことは、UnicodeStringコンストラクターが私が与えたデータをコピーするかどうかです。私は、不変オブジェクトを操作するだけのゼロコピーアプローチを使用することを非常に好みます。そのため、コピー操作を実行せず、指定したバッファーを使用するだけです。

また、使用できるかどうかもわかりません( UTF-16文字列からUCharIterator何らかの方法で変換できると仮定します)。UChar*

私の質問は、上記の目的で ICU をどのように使用すればよいですか?

ご回答ありがとうございます。

4

1 に答える 1

6

UnicodeStringデフォルトでは、ストレージに UTF-16 を使用します。そのため、fromUTF8andのみが含まれていfromUTF32ます。UTF-16 からは変換を行う必要はありません。

データをコピーします。によく似た所有文字列std::stringです。

UCharIteratorデータをコピーしたくない場合に使用できます。UCharは 16 ビット値です。UCHAR_TYPEマクロを定義することで、好きな 16 ビット型にすることができます。

UChar が #defined (たとえば、char16_t) の場合は UCHAR_TYPE に定義し、16 ビット幅の場合は wchar_t に定義します。常に署名されていないと見なされます。

どちらも使用できない場合は、UChar を uint16_t に定義します。

これにより、UChar の定義はプラットフォームに依存しますが、16 ビットの wchar_t 型を持つプラットフォームとの直接的な文字列型の互換性が可能になります。

于 2013-11-07T17:04:42.297 に答える