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,其中包含%20S
( Application Support
之间的空间转换为%20
),这会使NSLog()
NSURL *url = [NSURL fileURLWithString:[stringURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] isDirectory:YES]; NSLog(url);
使用NSLog("@%", url)
来避免这个错误。