日本語文書中のある文字列をリプレイスしたい場合、
NSMutableStringの replaceOccurrencesOfString:withString:options:range: を使うが、少なくとも対象文書がSJISの場合、最初のパラメータに文字列オブジェクトを使うとうまくいかない。たとえば、
replaceOccurrencesOfString:@"変換対象"
↑これはダメ。
しかし以下のようにするとうまくいく。
[_buffer replaceOccurrencesOfString:[NSString stringWithUTF8String:"変換対象"] withString:replacement options:0 range:NSMakeRange(0, [_buffer length])];
stringWithUTF8String:のときは@はいらない。オブジェクトではないからである(たぶん)。しかし、ヌルターミネートされている必要もないらしい。C文字列にはそれようのコンストラクタが用意されている。(stringWithCString:)
これと同様にして、日本語の文書をそソースコードから作成しHDDに書き出すことができる。
NSString *str=[NSString stringWithUTF8String:"これで日本語大丈夫"] ;
[str writeToFile:@"/hoge/hoge.txt" atomically:YES];
日本語の取り扱いではいろいろなやまされたが(いまも悩まされているが)、エンコーディングの基礎知識がないせいか何回失敗しても一貫した対処法が身に付かない。もっとエンコーディングの勉強をすべきであろう。
ソースコード中に日本語を書き入れるなんて狂気の沙汰と思われる方も多いだろうが、なんかマルチバイト文字になった途端に扱いを変えないといけない、というのがイヤなのである。まあ、極私的なコードしか書いてないから世間様に影響ない、というのが一番大きいけど。
最近のコメント