gpt4 book ai didi

objective-c - NSString writeToFile 带有 URL 编码字符串

转载 作者:行者123 更新时间:2023-12-03 16:44:23 25 4
gpt4 key购买 nike

我有一个 Mac 应用程序,它保留自己的日志文件。它使用 NSString 的 writeToFile 方法将信息附加到文件中。它记录的内容之一是与其交互的 Web 服务的 URL。为了对 URL 进行编码,我这样做:

searchString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)searchString, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8 );

然后应用程序将 searchString 附加到 URL 的其余部分并将其写入日志文件。现在的问题是,添加 URL 编码行后,似乎没有任何内容写入文件。然而,该程序按预期运行。删除上面的代码行会导致所有正确的信息都记录到文件中(删除该行不是一个选项,因为 searchString 必须进行 URL 编码)。

哦,我在将 NSString 写入文件时使用 NSUTF8StringEncoding。

感谢您的帮助。

编辑:我知道 NSString 中也有一个与 CFURLCreateStringByAddingPercentEscapes 类似的函数,但我读到它并不总是有效。如果我原来的问题无法得到解答,有人可以解释一下吗?谢谢! (编辑:使用 stringByAddingPercentEscapesUsingEncoding: 时会出现同样的问题)

编辑2:这是我用来将消息附加到日志文件的代码。

+(void)logText:(NSString *)theString{
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory,NSUserDomainMask,YES) objectAtIndex:0];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"Folder/File.log"];
NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:path] autorelease];
if([fileContents lengthOfBytesUsingEncoding:NSUTF8StringEncoding] >= 204800){
fileContents = @"";
}
NSString *timeStamp = [[NSDate date] description];
timeStamp = [timeStamp stringByAppendingString:@": "];
timeStamp = [timeStamp stringByAppendingString:theString];
fileContents = [fileContents stringByAppendingString:timeStamp];
fileContents = [fileContents stringByAppendingString:@"\n"];
[fileContents writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];
}

最佳答案

因为几乎一整天后没有人提供任何答案,我将在这里发布一个疯狂的猜测:您不会意外地将要输出的字符串(其中包含百分比字符)用作 < em>格式字符串你是吗?

也就是说,犯了这样的错误:

NSLog(@“在格式字符串中,您可以使用 %@ 作为对象的占位符,使用 %i 作为普通 C 整数。”)

而不是:

NSLog(@"%@", @"在格式字符串中,您可以使用 %@ 作为对象的占位符,使用 %i 作为普通 C 整数。");

但是如果这最终成为您问题的原因,我会感到惊讶,因为它通常会导致看起来随机的输出,而不是绝对没有输出。在某些情况下,Xcode 还会给出有关它的编译器警告(当我尝试 NSLog(myString) 时,我收到“警告:格式不是字符串文字且没有格式参数”)。

所以,如果这个答案没有帮助,请不要拒绝我。如果您可以向我们展示更多您的日志代码,那么回答您的问题会更容易。至于你提供的这一行,我没发现有什么问题。

编辑:哎呀,我有点错过你提到你正在使用 writeToFile:atomically:encoding:error: 将字符串写入文件,所以它是更不可能的是,您不小心将其视为某处的格式字符串。但我现在要保留这个答案。再说一次,你真的应该向我们展示更多你的代码......

编辑:关于您对 NSString 中具有类似百分比编码功能的方法的问题,该方法是 stringByAddingPercentEscapesUsingEncoding:。当你说你听说它并不总是有效时,我不确定你在想什么样的问题。但有一件事是 CFURLCreateStringByAddingPercentEscapes 允许您指定通常不需要转义但您仍然希望转义的额外字符,而 NSString 的方法不允许您指定此字符.

关于objective-c - NSString writeToFile 带有 URL 编码字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5494133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com