2011-01-18 13 views
4

Objective-Cで指定されたユニコード文字のユニコードコードポイントを取得します。 NSStringのは、内部使用のUTF-16エンコード前記NSStringのクラスは2つの基本メソッド長とcharacterAtIndex有するObjective-Cユニコード文字を取得する方法

、言った:そのインタフェース内の他のすべてのメソッドのための基礎を提供する - つまりします。 lengthメソッドは、文字列内のUnicode文字の合計数を返します。 characterAtIndex:文字列内の各文字にインデックス単位でアクセスします。インデックス値は0から始まります。

これは、characterAtIndexメソッドがユニコード対応であると思われます。しかし、unicharは16ビットのunsigned int型を返します。

- (unichar)characterAtIndex:(NSUInteger)index 

質問は以下のとおりです。

  • Q1:UFFFF上記のどのように存在Unicodeコードポイント?

  • Q2:Q1が意味をなさない場合、Objective-CのUnicodeコードのUnicodeコードポイントを取得する方法はありますか?

thx。 lengthのドキュメントから

答えて

2

番号が印刷されたとき、文字列 が表示されますかどうかを判断するために 、このメソッドを使用することはできませんので、構成 文字列の 個々の文字を含んで返品方法 と表示されます。このことから

、Iは、U + FFFF上記いずれかの文字が2つの文字としてカウントされるであろうと、サロゲートペア(http://unicode.org/glossary/に関連するエントリを参照)として符号化されるであろうと推測であろう。

変換する文字を含むUTF-32でエンコードされた文字列がある場合は、initWithBytesNoCopy:length:encoding:freeWhenDone:で新しいNSStringを作成し、その結果を使用して文字がUTF-16でエンコードされている方法を判別できます。多くの重いUnicode処理を行うつもりですが、おそらくICU(http://site.icu-project.org/)に精通しているのがよいでしょう。

3

「Q1:UFFFFの上にユニコードコードポイントを表示する方法」に対する簡単な答えあなたはUTF16を認識しており、は正しくハンドルSurrogate Code Pointsである必要があります。下の情報とリンクは、これを行うためのポインタとサンプルコードを与えるはずです。

NSStringのマニュアルが正しいです。しかし、「NSStringは内部でUTF-16エンコーディングを使用しています」と言っている間、NSStringの公開/抽象インターフェースはUTF16に基づいていると言うのがより正確です。相違点は、文字列の内部表現をプライベートな実装の詳細にしておきますが、characterAtIndex:lengthなどのパブリックメソッドは常にUTF16です。

その理由は、それがどの、ASCII 128個の文字に、7ビットを使用(主としてUnicodeはASCIIの完全なスーパーセットであるという事実のために、古いASCII -centricとUnicode認識文字列の間の最良のバランスを取る傾向にあるです最初の128のUnicodeコードポイントにマッピングされます)。 UTF16が組み合わさSurrogate Pairを形成するために特別なSurrogate Code Pointsを使用して、明らかに単一UTF16Code Unitで表すことができるものを超えて、U+FFFF>であることユニコードCode Pointsを表すために

は、Unicodeコードポイント>U+FFFFを形成します。あなたがでこれについての詳細を見つけることができます:公式のUnicode UTFよくある質問がWhat’s the algorithm to convert from UTF-16 to character codes?

  • - - - What are surrogates?
  • UnicodeのUTFよくある質問

    • UnicodeのUTFよくある質問をHow do I write a UTF converter?は今International Components for Unicodeの使用を推奨しています、それはいくつかをお勧めするために使用しましたコードは公式に承認され、Unicodeによって維持されます。もはやUnicode.orgから直接入手することはできませんが、さまざまなオープンソースプロジェクトの「公式ではない」サンプルコードのコピーは、ConvertUTF.cConvertUTF.hの中にあります。独自のロールを作成する必要がある場合は、十分にテストされているので、まずこのコードを調べることを強くお勧めします。
  • 関連する問題