2011年09月07日

NSStringとC文字列(3)

NSStringとC文字列の間の変換についての3回目。

前2回は文字列エンコーディングを指定してNSStringからC文字列を取り出す方法を見てきました。

その中で、エンコーディングによってはNSStringに格納されている文字列情報を変換できずにC文字列の取得に失敗する場合があるという話がありました。文字列中に変換できない文字があったとしても他の文字は変換可能ですので、変換できない文字1つのために取得できる情報がゼロというのも困った物です。その場合にどうすればいいのかを見てみたいと思います。

その前に、C文字列が取得できなかった原因がメモリ不足など他の原因ではないことを確認するメソッドがあります。

- (BOOL)canBeConvertedToEncoding:(NSStringEncoding) encoding


これは指定されたエンコーディング(その1で例示しています)に情報の欠落なしに、ということは全ての文字を変換可能かどうかを返します。YESであれば変換可能。NOであれば変換不能。つまりここでNOが返ってくれば前回までのメソッドではC文字列を取得できないことがわかります。


では、情報欠落してもいいからC文字列が欲しいという場合にどうするかですが、こちらのメソッドを使います。

- (NSData *)dataUsingEncoding:(NSStringEncoding) encoding allowLossyConversion:(BOOL) flag


ここで変換したい文字列エンコーディングを指定し、かつflagでYESを指定すると仮に情報欠落があったとしてもなんとかして指定されたエンコーディングで変換したデータを返します。ここではc文字列としてではなくNSDataですからautoreleaseされているだけでメモリ管理方法に迷う必要がありません。

もしflagでNOを指定した場合には前に紹介した方法と同様で、変換できない文字があると変換に失敗してnilが返ります。

ちなみにこのNOのケース(つまり情報欠落なく変換したいがC文字列const char *としてではなくNSDataとして欲しい場合)のため専用のメソッドが容易されていていかがそれです。


- (NSData *)dataUsingEncoding:(NSStringEncoding) encoding


posted by 永遠製作所 at 14:53| 東京 ☀| Comment(0) | TrackBack(0) | Cocoa | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/224742448
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック