如何将二进制数据转换为NSstring?

发布于 2024-10-21 00:57:58 字数 642 浏览 1 评论 0原文

使用 AVAudioRecorder 录制后,生成的声音文件必须发送到 Web 服务。文件数据必须进行 URL 编码并复制到 POST 请求的正文中。录音格式为kAudioFormatAppleLossless。 第一步,在 URL 编码之前,我尝试将 .caf 文件复制到 NSString 中,但

NSStringEncoding encoding;
 NSString * filestring = [NSString 
                         stringWithContentsOfURL:self.audioRecorder.url 
                     usedEncoding:&encoding 
                         error:&error];

出现以下错误:

Error Domain=NSCocoaErrorDomain Code=264“操作无法完成。(Cocoa 错误 264。)”

返回的编码是0x5bab9f0,它不在为NSStringEncoding定义的值列表中。 AVAudioRecorder 写入文件时使用什么编码?将二进制文件转换为 URL 编码字符串的最佳方法是什么?

After recording with AVAudioRecorder the resulting sound file has to be sent to a webservice. The file data has to be URL encoded and copied into the body of the POST request. The recording format is kAudioFormatAppleLossless.
As a first step, prior to URL encoding, I tried to copy the .caf file into a NSString, using

NSStringEncoding encoding;
 NSString * filestring = [NSString 
                         stringWithContentsOfURL:self.audioRecorder.url 
                     usedEncoding:&encoding 
                         error:&error];

I got the following error:

Error Domain=NSCocoaErrorDomain Code=264 "The operation couldn\u2019t be completed. (Cocoa error 264.)"

The encoding returned was 0x5bab9f0, which is not among the list of values defined for NSStringEncoding.
What encoding does AVAudioRecorder use when writing to the file? What is the best way of converting a binary file to a URL encoded string?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏花。依旧 2024-10-28 00:57:58

绝不。使用。 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];

Never. Use. NSString. For. Data. That's. Not. A. String...
Use NSData instead, you won't need to URLEncode it (because it 'already is').

You can use this:

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];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文