NSStringいろいろ
NSStringについてのいろいろ。 記事を書いた時のiOSバージョンはiOS6.1.3です。 初期化時の複数バイトエンコーディングの扱い - (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; は引数にencodingがあるが、複数バイトエンコーディングのものを指定すると、全て0となっているバイトで文字列末端とみなされるようだ。 例えば2バイトで 00000000 10101010 と表される文字があるとすると00000000のバイトを文字列末端とみなすらしい。 長い文字列のはずが、いきなり初めのほうで文字列が終わってしまう。 + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc も同様。 上位8ビットが0の時だけでなく下位8ビットが0の時でも末端と見るようだ。 おそらく 8ビット毎に取り出して char selectedChar = 取り出し関数(); if(selectedChar == 0){ 末端処理 }else{ switch(エンコード){ 各エンコード別の処理 } } のような処理だ。 そもそも8ビットの0を内部に含むエンコーディングはC言語文字列の定義から外れるという考え方なんだろう。 対策は – initWithBytes:length:encoding:(これはどのエンコードでもいけそう) - initWithCharacters:length:(UTF-16限定?) + stringWithCharacters:length:(UTF-16限定?) などを使う。 第3水準、第4水準の漢字に対応しているか まず、漢字の分類方法なのだが、第1、第2、第3、第4とあり、数字が大きいほうに使用頻度の低い漢字が割り当てられている。 第4水準の初めの文字は「毎」のカンムリだけを取り出したようなもの。読み方はわからず。このブログでは表示出来ない。 で、この漢字をiOSで扱えるのか? Unicodeに含まれていれば対応しているんではないか?と思うかもしれ...