0

UTF エンコーディングには文字以外のコードがあり、これらの例外を処理する必要があります。これを行うライブラリがたくさんあることは知っていますが、基本的な原則を知る必要があると思います。

Unicode コードポイントを UTF または UCS エンコーディングとの間でトランスコードする場合、何を気にする必要がありますか? 各エンコーディングには異なるルールがあると思いますが、3 つが単純なプリンシパルである必要があります。私はそれを知りたい。

アップデート

から Unicode コード ポイント (UTF-16 文字ではない) を抽出しようとしていたため、この質問を投稿しましたNSStringNSString文字処理用の UTF-16 方式の API のみをサポートしているため、実際のコード ポイントを取得するには追加の処理を実行する必要があります (これは実際には意味があります)。私のプログラムは

  1. サロゲート ペア文字を正しくプロモートする
  2. または、信頼できる文字処理のためにそれらを禁止します。

しかし、問題は、サロゲート ペアだけが UTF-16 で処理する必要があるかどうかわからないことです 。気にするものがもっとあるはずだと思います、そしてそれを知りたいです。可能であれば、他のエンコーディングでも。もちろん、処理が簡単な場合に限ります。非常に複雑な場合は、 のようなライブラリを使用しますlibICU

その機能が私に与えられることはわかっlibICUていますが、現在、私にはやや過剰に設計されているように感じます. 基本的なルール (たとえば、「サロゲート ペアだけが重要です!」) を知っていれば、少なくともサポートされていない文字を禁止することは非常に簡単でシンプルなはずです。

4

1 に答える 1

1

NSString にメソッドがあります

enumerateSubstringsInRange:options:usingBlock:

オプションとして NSStringEnumerationByComposedCharacterSequences を指定できます。これにより、構成された Unicode コード ポイントを指定する一連の NSRange 値が得られます。そのため、単一の unichar (つまり 16 ビット) に収まるほとんどのコード ポイントでは、NSRange は NSString への単一のインデックスをカバーしますが、たとえば絵文字文字の Unicode コード ポイントの場合、NSRange は複数の unichar をカバーします。

于 2013-03-13T16:18:17.367 に答える