通常,如果文件在文件或数据的开头包含 BOM,则识别数据的编码是有用的。
但是如果你使用NSData的dataUsingEncoding
方法,如果编码需要一个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 吗?