0

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

我的问题:

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

提前致谢!

保罗

4

1 回答 1

1

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

NSData* convertedContent = [NSData dataWithBytes:content.data() length:content.length()];
于 2011-07-31T20:58:33.647 回答