not good but great

プログラミング、アート、映画・本の感想について書きます。

NSLogでNSArrayをすべて表示させると、日本語が文字化けした

日本語が正しく表示されない

//配列
NSArray *arr = @[@"AAA",@"いいい",@"ううう"];

NSLog(@"result %@",arr);
/*
result (
    AAA,
    "\U3044\U3044\U3044",
    "\U3046\U3046\U3046"
)
*/

要素の中に日本語が含まれている配列の中身を表示させると、日本語がうまく表示されませんでした。

for-inでは正しい

for(id s in arr)
{
    NSLog(@"%@",(NSString*)s);
}
/*
AAA
いいい
ううう
*/

for-inでは日本語が表示されました。

インデックスを指定すると正しく表示される

NSLog(@"%@",arr[1]);//いいい

直接要素を指定するとOKでした。

NSArrayを「すべて」NSLogすることに原因がある?

こちらのリンクを読むと、NSLogがdescriptionWithLocaleというものを暗黙的に呼び出しているらしいです。
iOS - NSArray MethodSwizzlingを使用しNSLogで日本語文字列を文字化け(正確に言うとUTF)させずに出力する - Qiita

辞書を使うのでしょうか。
NSDictionaryやNSArrayが日本語を含んでいるとNSLogで読めないことへの対処 | スマートフォンアプリ開発会社のエンジニアブログ

コンパイラをGDBにするという方法も見つかったのですが、Xcode5だとGDBが入っていませんでした・・・。

結局よくわからず、眠くなったので諦めました。