【问题标题】:NSData to NSString using initWithBytes:length:encodingNSData 到 NSString 使用 initWithBytes:length:encoding
【发布时间】:2011-05-07 17:13:54
【问题描述】:

我有一些图像数据 (jpeg) 我想从我的 iPhone 应用程序发送到我的网络服务。为了做到这一点,我使用图像中的 NSData 并将其转换为将放置在我的 JSON 中的字符串。

目前,我正在这样做:

    NSString *secondString = [[NSString alloc]  initWithBytes:[result bytes]
                                                    length:[result length] 
                                                  encoding:NSUTF8StringEncoding];

其中结果是 NSData 类型。但是,即使结果长度返回一个实际值(如 14189), secondString 似乎也为空。我使用了这种方法,因为结果是原始数据并且不是以空值结尾的。

我做错了吗?我在其他领域使用过这段代码,它似乎工作正常(但我目前使用的那些领域涉及文本而不是图像数据)。

TIA。

【问题讨论】:

    标签: iphone nsstring uiimage nsdata


    【解决方案1】:

    对于二进制数据,最好使用 Base64 编码对其进行编码,然后在您的 Web 服务中对其进行解码。我使用从here 下载的 NSData+Base64 类,此参考也取自 Stackoverflow,@Ken 制作的answer(感谢 Ken!)。

    【讨论】:

    • 我试过 Base64 但得到了一些非法的 JSON 字符(之前)。我会仔细研究一下编码,看看是否能找到错误。
    • 甜,它奏效了。看起来我使用的 base64 函数需要稍微调整一下。谢谢!
    【解决方案2】:

    您没有将数据转换为字符串。您试图将其解释为 UTF-8 编码的字符串,除非数据确实是 UTF-8 编码的字符串,否则它将失败。最好的办法是以某种方式对其进行编码,也许像 Manny 建议的那样使用 Base64,然后在服务器上再次对其进行解码。

    【讨论】:

    • 好的。是的,我不确定这是否可能。我正在尝试解决外部库中的一些代码,但不确定这是否有意义。谢谢。
    • 只是给任何未来读者的注释。来自 UTF-8 的 wiki:“并非所有字节序列都是有效的 UTF-8。”并且更仔细地查看 UTF-8 的定义,我可以看出哪里有问题。通过获取二进制数据(不是 UTF-8)并尝试将其解释为 UTF-8,您似乎遇到了问题。我环顾 Stack Overflow,找不到任何人明确表示过这一点。
    猜你喜欢
    • 2011-03-02
    • 2012-01-17
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多