短い答え
を指定đ
するには、次の方法で指定できます (未テスト)。
@"đ"
@"\u0111"
@"\U00000111"
[NSString stringWithUTF8String: "\u0111"]
[NSString stringWithUTF8String: "\xc4\x91"]
最後の 2 行では、Objective-C 文字列オブジェクト リテラル コンストラクトの代わりに C 文字列リテラルを使用していることに注意してください@"..."
。
簡単に説明すると、\u0111
は の Unicode エスケープ シーケンスですđ
。ここU+0111
で、 は文字のコード ポイントですđ
。
最後の例は、C 文字列リテラルでđ
(つまりc4 91
) の UTF-8 エンコーディングを指定し、UTF-8 エンコーディングのバイトを適切な文字に変換する方法を示しています。
上記の例は、この回答とこのブログ投稿から改作されています。このブログでは、Unicode のBasic Multilingual Plane (Plane 0)を超えた文字のトリッキーな状況についても取り上げています。
Unicode エスケープ シーケンス (C99 の汎用文字名)
このブログによると1 :
Unicode エスケープ シーケンスは、C99 の TC2 修正で C 言語に追加され、Mac OS X 10.5 で Objective-C 言語 (NSString リテラル用) に追加されました。
C99 TC2 ドラフトの 65 ページには、 or\unnnn
が\Unnnnnnnn
「ISO/IEC 10646 標準で定義された短い識別子」であることが示されています。ご了承ください:nnnn
nnnnnnnn
$
ユニバーサル文字名は、短い識別子が 0024 ( )、0040 ( @
)、または 0060 ( )以外の 00A0 未満である文字`
、および D800 から DFFF までの範囲の文字を指定してはなりません。
文字セットと文字エンコーディング
U+0111
コードポイントとUTF-8エンコーディングc4 91
(文字をバイトとして表現)を混同しているようです。UTF-8 エンコーディングは、Unicode 文字セットのエンコーディングの 1 つです。コード ポイントは、文字セット内の文字に割り当てられた番号です。このウィキペディアの記事では、意味の違いが非常に明確に説明されています。
コード化文字セット(CCS) は、コード ポイントと呼ばれる多数の (通常は負でない) 整数値を使用して、文字のレパートリーを表す方法を指定します。[...]
文字エンコード形式(CEF) は、コード化された文字セットの整数コードを、固定数のビットを使用してバイナリ形式で数値を表すシステムでの格納を容易にする、サイズが制限された整数コード値のセットへの変換を指定します [...]
UTF-16 や UTF-32 など、ディスク上の文字の異なるバイト表現を提供する他のエンコーディングがありますが、UTF-8、UTF-16、および UTF-32 はすべて Unicode 文字セットのエンコーディングであるため、コード同じ文字のポイントは、3 つのエンコーディングすべてで同じです。
脚注
1 : ブログは正しいと思いますが、この点について誰かが Apple の公式ドキュメントを見つけることができれば、より良いでしょう。