最近在做用ios端访问服务器端的小应用,遇到NSURL中含有中文的问题,各种google百度试了一天也没找到有效的办法,只能再次请教了!
服务器端是mac下的Tomcat,
NSString *testURL = @"http://localhost:8080/Hessian/张三/3.jpg";(此处用张三代替真实人名)NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) testURL,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8));
得到的escapedString是类似“http%3A%2F%2Flocalhost%3A8080%2FHessian%2F%E5%A4%8F%E7%82%9C%2F3.jpg”这样的东西,如果用一下方法,则斜杠和‘: ’符号会保留,但是中文变成”%E5%A4%8F%E7%82%9C“一样的,
NSString *testURL2=[NSString stringWithString:[@"http://localhost:8080/Hessian/张三/3.jpg" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];之后再用NSURL *url = [NSURL testURL2(或者escapedString)];,最后得到的url确实是有内容的,但是调用了[NSData dataWithContentsOfURL:url]]之后返回的值依然为nil,路径下图片是存在的,把中文文件夹换成英文名就可以访问,不知道原因何在,各种办法都试过了,依然无法正确的访问到图片的数据,如果直接在浏览器上访问,得到的结果是
“/Hessian/%E5%A4%8F%E7%82%9C/3.jpg 説明 The requested resource is not available.”
请教各位经验丰富的前辈,这种地方到底应该怎么处理才行?
服务器端是mac下的Tomcat,
NSString *testURL = @"http://localhost:8080/Hessian/张三/3.jpg";(此处用张三代替真实人名)NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) testURL,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8));
得到的escapedString是类似“http%3A%2F%2Flocalhost%3A8080%2FHessian%2F%E5%A4%8F%E7%82%9C%2F3.jpg”这样的东西,如果用一下方法,则斜杠和‘: ’符号会保留,但是中文变成”%E5%A4%8F%E7%82%9C“一样的,
NSString *testURL2=[NSString stringWithString:[@"http://localhost:8080/Hessian/张三/3.jpg" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];之后再用NSURL *url = [NSURL testURL2(或者escapedString)];,最后得到的url确实是有内容的,但是调用了[NSData dataWithContentsOfURL:url]]之后返回的值依然为nil,路径下图片是存在的,把中文文件夹换成英文名就可以访问,不知道原因何在,各种办法都试过了,依然无法正确的访问到图片的数据,如果直接在浏览器上访问,得到的结果是
“/Hessian/%E5%A4%8F%E7%82%9C/3.jpg 説明 The requested resource is not available.”
请教各位经验丰富的前辈,这种地方到底应该怎么处理才行?
ie浏览器可以,mac os的google chrome就不行
尝试如下代码:
NSString *url_str=[NSString stringWithString:[@"http://localhost:8080/Hessian/张三/3.jpg" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURL *url=[NSURL urlWithString:url_str];
NSData* data = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:url] returningResponse:NULL error:NULL];
刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。
刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。
还是不行的话,那你就要从长远考虑来看的话。以后的目录命名避免再使用中文来命名