通常、ファイルまたはデータの先頭に BOM が含まれている場合、データのエンコーディングを特定すると便利です。
しかし、NSData のdataUsingEncoding
メソッドを使用すると、エンコーディングで BOM が必要な場合に BOM が追加されます。したがって、このメソッドを数回使用し、これらのデータを出力データとして一緒に追加してファイルに書き込むと、ファイルには複数の BOM が含まれます。最初の BOM を除く BOM はデータ部分になります。
例えば:
NSMutableData *data = [NSMutableData data];
[data appendData:[@"abc" dataUsingEncoding:NSUTF16StringEncoding]];
[data appendData:[@"123" dataUsingEncoding:NSUTF16StringEncoding]];
[data appendData:[@"qwe" dataUsingEncoding:NSUTF16StringEncoding]];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF16StringEncoding];
その場合、str は次のようになります: abc\ufeff123\ufeffqwe (NSLog を実行すると abc123qwe と表示されますが、これは NSLog が出力を処理したためだと思います)。
しかし、strを正確にabc123qweにしたいのですが、これらのBOMを削除するエレガントな方法はありますか? または、文字列を確認して手動ですべての BOM を削除できますか?