Как преобразовать выходные данные сжатия XZ в строку NSString? - PullRequest
0 голосов
/ 01 августа 2011

Я успешно настроил небольшой XZ-компрессор, который возвращает std :: string, которая содержит сжатый вывод.Для обработки результата мне нужно «преобразовать» std :: string в NSString.К сожалению, есть проблемы (кодирование?):

Несмотря на то, что «abc» не является хорошим примером, это показывает, что сложность довольно хорошая:

NSString *text = [_text string]; // Length is 3

std::string content = xz_compress([text UTF8String]); // Length is 60

NSString *convertedContent = [NSString stringWithCString:content.c_str() encoding:NSUTF8StringEncoding];

// convertedContent is (null) and 0 characters long

Использование NSUnicodeStringEncoding делает NSString как минимум 2 символамидолго, но они не совпадают с теми, что указаны в std :: string.

Мои вопросы:

  • Возможно ли это / предпочтительный способ (уже неуверенный в этом)?
  • Если так: какую кодировку мне нужно использовать?

Заранее спасибо!

Пол

1 Ответ

1 голос
/ 01 августа 2011

Я предполагаю, что выходные данные xz_compress являются двоичными данными.Итак, почему бы вам не попробовать и использовать метод NSData dataWithBytes:length:?Возможно, вы также можете попробовать использовать string::data() вместо string::c_str по той же причине:

NSData* convertedContent = [NSData dataWithBytes:content.data() length:content.length()];
...