如何将二进制数据转换为 NSstring?
Posted
技术标签:
【中文标题】如何将二进制数据转换为 NSstring?【英文标题】:How to convert binary data to NSstring? 【发布时间】:2011-03-08 16:32:11 【问题描述】:使用 AVAudioRecorder 录制后,必须将生成的声音文件发送到网络服务。文件数据必须经过 URL 编码并复制到 POST 请求的正文中。录音格式为 kAudioFormatAppleLossless。 作为第一步,在 URL 编码之前,我尝试使用
将 .caf 文件复制到 NSStringNSStringEncoding encoding;
NSString * filestring = [NSString
stringWithContentsOfURL:self.audioRecorder.url
usedEncoding:&encoding
error:&error];
我收到以下错误:
Error Domain=NSCocoaErrorDomain Code=264 "操作无法完成。(Cocoa 错误 264。)"
返回的编码是 0x5bab9f0,它不在为 NSStringEncoding 定义的值列表中。 写入文件时 AVAudioRecorder 使用什么编码?将二进制文件转换为 URL 编码字符串的最佳方法是什么?
【问题讨论】:
【参考方案1】:从来没有。采用。 NSString。为了。数据。那是。不是。 A. 字符串... 使用 NSData 代替,您不需要对其进行 URLEncode(因为它“已经是”)。
你可以用这个:
NSMutableData *postData = [[NSMutableData alloc] init];
[postData appendData:[@"--boundary\r\nContent-Disposition: form-data; name=\"myfile\"; filename=\"ad.gif\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[NSData dataWithContentsOfURL:self.audioRecorder.url]];
[postData appendData:[@"\r\n--boundary--\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[myRequest setHTTPMethod:@"POST"]; // this you probably already did.
[myRequest setHTTPBody:postData];
【讨论】:
文件内容必须作为参数复制到 POST 正文中,而不是作为表单数据发送。尝试使用 NSData,但结果不符合服务器的预期,见下文: sendFileRequest = [ASIFormDataRequest requestWithURL:myURL]; NSData * 数据 = [NSData dataWithContentsOfURL:audioRecorder.url]; [sendFileRequest setPostValue:data forKey:kParamRecordBinaryContent]; 您是否使用 $_FILES['myfile']; 请求文件(如果您使用的是 php)?顺便提一句。你正在使用 NSURLConnection + NSMutableURLRequest,对吧? 它将转到一个网络服务。然而,发现的二进制数据必须首先为服务器进行 base64 编码,所以最终的解决方案是 'NSString * encodedString = [QSStrings encodeBase64WithData:[NSData dataWithContentsOfURL:audioRecorder.url]];'另见link非常感谢您的帮助以上是关于如何将二进制数据转换为 NSstring?的主要内容,如果未能解决你的问题,请参考以下文章