【问题标题】:How to convert a XZ compression output to a NSString?如何将 XZ 压缩输出转换为 NSString?
【发布时间】:2011-10-17 01:23:27
【问题描述】:

我已经成功设置了一个小型 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 中的不匹配。

我的问题:

  • 这种方式可能/更可取(已经不确定)吗?
  • 如果是这样:我需要使用什么编码?

提前致谢!

保罗

【问题讨论】:

    标签: nsstring objective-c++ stdstring xz


    【解决方案1】:

    我假设 xz_compress 输出是二进制数据。那么,为什么不尝试使用NSDatadataWithBytes:length: 方法呢?出于同样的原因,您可能也可以尝试使用string::data() 而不是string::c_str:

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

    【讨论】:

    • 这很完美!但是我仍然能够将数据“添加”到 NSData 吗?我想要一个包含此压缩数据的 JSON 文件。
    猜你喜欢
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多