NSUrl fileURLWithPath返回奇怪的中文符号

我有一个NSStringpath到我的文档文件夹。

NSString* stringURL = @"/var/mobile/Applications/5667FADC-F848-40CF-A309- 7BFE598AE6AB/Library/Application Support/MyAppDirectory"; 

当我把它NSUrl

  NSURL* url = [NSURL fileURLWithPath:stringUrl]; 

NSLog(@"Created URL: %@",url); ,我得到了一些奇怪的结果:

/// VAR /移动/应用/ 5667FADC-F848-40CF-A309-7BFE598AE6AB /库/应用程序㤈㤋ތȀ乽启汲唠䱒>楦敬⼺⼯庆⽲潭楢敬䄯灰楬惯楴汤⽳㘵㜶䅆䍄䘭㐸ⴸ〴䙃䄭〳ⴹ䈷䕆㤵䄸㙅䉁䰯扩慲祲䄯灰楬惯楴汤㈥匰灵溃玱䴯䅹灰楄敲琐牯⽹upport / MyAppDirectory /

这是为什么? 我究竟做错了什么 ?

logging数值时我没有看到任何中文字。

 NSString* stringURL = @"/var/mobile/Applications/5667FADC-F848-40CF-A309-7BFE598AE6AB/Library/Application Support/MyAppDirectory"; NSURL* url = [NSURL fileURLWithPath:stringURL]; NSLog(@"%@",url); 

古典错误。 不要使用NSLog(url),使用NSLog(@“%@”,url)。 NSLog的第一个参数是一个格式string,并且格式string中的%字符被解释,而不是打印。 例如,格式string中的%s表示参数列表中预期会有另一个Cstring。 由于url可能包含各种各样的字符,这可能导致垃圾结果甚至崩溃。

基于你从前一个问题接受的答案; 这是因为使用stringByAddingPercentEscapesUsingEncoding会生成一个stringByAddingPercentEscapesUsingEncoding printf的格式化string,其中包含%20SApplication Support之间的空间转换为%20 ),这会使NSLog()

 NSURL *url = [NSURL fileURLWithString:[stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] isDirectory:YES]; NSLog(url); 

使用NSLog("@%", url)来避免这个错误。