Как преобразовать выходные данные сжатия 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 является двоичными данными. Итак, почему бы вам не попробовать и использовать NSData
dataWithBytes:length:
метод? Возможно, вы также можете попробовать с string::data()
вместо string::c_str
по той же причине:
NSData* convertedContent = [NSData dataWithBytes:content.data() length:content.length()];