1

我遇到了来自 NSData 的非常奇怪的行为。当我尝试添加图像数据时,NSData var 莫名其妙地设置为 nil:

NSMutableData *postbody = [NSMutableData data];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    UIImage *i = [UIImage imageNamed:@"pic2"];
    NSLog(@"image data %@", UIImagePNGRepresentation(i));
    [postbody appendData:UIImagePNGRepresentation(i)];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    NSString *bodyString = [[NSString alloc] initWithData:postbody encoding:NSUTF8StringEncoding];
    NSLog(@"body %@", bodyString);

上面记录图像数据显示 UIImagePNGRepresentation(i) 实际上是在返回数据,但是当记录正文时,日志显示为 nil。为什么会这样?

4

1 回答 1

4

PNG 表示不是有效的 UTF-8。postbody包含“任意”数据——它不能(可靠地)转换为 UTF-8 字符串(这是一个结构化的、每个字符表示的可变八位字节)。因此,当您尝试从数据创建 NSString 时,它会失败,因为它发现 UTF-8 格式错误。

NSString *bodyString =
  [[NSString alloc] initWithData:postbody encoding:NSUTF8StringEncoding];
                                 ^^^^^^^^            ^^^^
于 2013-05-28T15:37:08.017 回答