最近在做用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.”
请教各位经验丰富的前辈,这种地方到底应该怎么处理才行?

解决方案 »

  1.   


    ie浏览器可以,mac os的google chrome就不行
      

  2.   

    使用NSUTF8StringEncoding转码应该就可以了吧
    尝试如下代码:
    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]; 
      

  3.   


    刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。
      

  4.   


    刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。
    还是不行的话,那你就要从长远考虑来看的话。以后的目录命名避免再使用中文来命名