Как преобразовать выходные данные сжатия XZ в строку NSString?

Я успешно настроил небольшой 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 ответ

Решение

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

NSData* convertedContent = [NSData dataWithBytes:content.data() length:content.length()];
Другие вопросы по тегам