保存文件iOS时用空格字符替换%20

Posted

技术标签:

【中文标题】保存文件iOS时用空格字符替换%20【英文标题】:Replace %20 with space character while saving file iOS 【发布时间】:2014-01-31 16:52:27 【问题描述】:

我现在正在录制音频文件并保存到文档目录。给定名称包含空格字符。当我保存到文档目录时,空格字符更改为 %20。我想知道如何正确保存,以便该音频文件名包含空格字符。

    NSString *myDBnew = [documentsDirectory stringByAppendingPathComponent:recordingAudioName ];
    NSURL *recordedTmpFile = [NSURL fileURLWithPath:myDBnew];

已编辑 - 这是进行录音并保存到本地目录。 recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error];

【问题讨论】:

你是这样获取文件名的,你是怎么保存文件的? 音频文件是 NSData 吗? 我已经更新了我的问题。我使用 AVAudioRecorder 开始录制并自动保存到文档目录。 【参考方案1】:

您正在使用 NSURL 并且空格是 URL 中的无效字符。这就是它被转换为 %20 的原因。

【讨论】:

是的..正是..我应该如何允许有空格字符?我需要使用 NSURL 来使用 AVAudioRecorder 开始录制。 由于您必须使用NSURL,因此您在录制时会卡在 %20 上。录制完成后,您可以使用 NSFileManagermoveItemAtPath 到不同的文件名。 @KhantThuLinn 文件名中有 %20 有什么问题?这真的有问题吗? :D ... %20 看起来不太适合文件名。谢谢。我现在正在使用你建议的那个。我重命名了那个文件。【参考方案2】:

请使用

-(BOOL)writeToFile:options:error: 代替 -(BOOL)writeToURL:options:error:.

writeToFileNSString 作为参数(不是NSURL)。以这种方式保留空间。

NSString *myDBnew = [documentsDirectory stringByAppendingPathComponent:recordingAudioName];
NSerror *error;
if (![data writeToFile:myDBnew options:0 error:&error]) 
    // Error handling

【讨论】:

为什么要投反对票?如果您想将 NSData 保存到本地文件,这是完全正确的! 我现在正在使用 AVAudioRecorder,我需要用空格保存文件名。我该怎么办?录音机 = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile 设置:recordSetting 错误:&error]; 恐怕你不能。 AVAudioRecorder 只接受 URL。您也许可以使用临时文件(不带空格)并稍后重命名它? 是的。我也会尝试这种方式。谢谢:)

以上是关于保存文件iOS时用空格字符替换%20的主要内容,如果未能解决你的问题,请参考以下文章

写一个函数,将字符串中空格替换为%20。

JZ5-替换空格

《剑指Offer》替换空格(将字符串中的空格替换为%20)

替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

字符串替换空格

替换空格