使用文件保存BOM

时间:2011-06-23 21:05:45

标签: iphone utf-8 rtf utf-16 byte-order-mark

有人可以告诉我如何用文件保存字节顺序标记(BOM)吗?例如,我现在保存一个文本文件,如:

NSString *currentFileContent = @"This is a string of text to represent file content.";
NSString *currentFileName = @"MyFileName";
NSString *filePath = [NSString stringWithFormat:@"%@/%@.%@", [self documentsDirectory], currentFileName, rtf];
[currentFileContent writeToFile:filePath atomically:YES encoding:NSUTF16StringEncoding error:&error];

我对BOM的理解是:

  

BOM字符是“ZERO WIDTH”   NO-BREAK SPACE“字符,U + FEFF,in   Unicode字符集。

我有一个iPhone应用程序,允许用户将文本保存到RTF文件。如果我使用NSUTF8StringEncoding,所有工作正常,除非用户有双字节字符,如日语或中文。简单的答案似乎是使用NSUTF16StringEncoding保存文件,这在最近的RTF规范中是允许的,除非Microsoft Word只能在定义BOM时自动打开UTF-16文件。

我希望如果我可以设置通用BOM,我不需要识别用户的字符集,因为我无法预先知道它是什么。但是他们仍然可以用双字节字符打开RTF文件。

感谢您的建议或见解。

1 个答案:

答案 0 :(得分:1)

如果您首先将字符串转换为数据,然后将数据写入文件,那么NSString的dataUsingEncoding:allowLossyConversion:将为您添加BOM。您可以按如下方式编写文件:

NSData *data = [currentFileContent dataUsingEncoding:NSUTF16StringEncoding];
[data writeToFile:filePath options:NSDataWritingAtomic error:&error];