我在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)实际上是返回数据,但是当记录body时,日志显示为nil。为什么会这样?
答案 0 :(得分:4)
PNG表示无效UTF-8。 postbody
包含“任意”数据 - 它不能(可靠地)转换为UTF-8字符串(每个字符表示形式的结构化变量八位字节)。因此,当您尝试从数据创建NSString时,它会失败,因为它发现UTF-8格式不正确。
NSString *bodyString =
[[NSString alloc] initWithData:postbody encoding:NSUTF8StringEncoding];
^^^^^^^^ ^^^^