Сохранить спецификацию с файлом - PullRequest
2 голосов
/ 24 июня 2011

Может кто-нибудь подсказать, пожалуйста, как сохранить маркер порядка байтов (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];

Мое понимание спецификации:

Символ спецификации - "НУЛЯ ШИРИНЫ" Персонажа "NO-BREAK SPACE", U + FEFF, в набор символов Unicode.

У меня есть приложение для iPhone, которое позволяет пользователям сохранять текст в файл RTF. Все работает нормально, если я использую NSUTF8StringEncoding, если только у пользователя нет двухбайтовых символов, таких как японский или китайский. Казалось бы, простой ответ - сохранить файл с NSUTF16StringEncoding, что разрешено в более поздних спецификациях RTF, за исключением того, что Microsoft Word может автоматически открывать файлы UTF-16 только в том случае, если определена спецификация.

Я надеюсь, что если я смогу установить общую спецификацию, мне не нужно будет определять набор символов пользователя, поскольку у меня нет возможности узнать, что это такое заранее. Но они по-прежнему смогут открывать файлы RTF с двухбайтовыми символами.

Спасибо за предложения или понимание.

1 Ответ

1 голос
/ 24 июня 2011

Если сначала преобразовать строку в данные, а затем записать данные в файл, то dataUsingEncoding:allowLossyConversion: NSString добавит для вас спецификацию. Вы можете написать свой файл следующим образом:

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