求教:关于NSURL中含有中文,转码之后用NSData的dataWithContentsOfURL调用后为nil

养乌龟的hx 2014-08-29 11:38:43
最近在做用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.”


请教各位经验丰富的前辈,这种地方到底应该怎么处理才行?
...全文
1331 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReyZhang 2014-09-05
  • 打赏
  • 举报
回复
引用 5 楼 daxiatou 的回复:
[quote=引用 4 楼 zhanglei5415 的回复:] 使用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];
刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题。。。依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。[/quote] 还是不行的话,那你就要从长远考虑来看的话。以后的目录命名避免再使用中文来命名
养乌龟的hx 2014-09-04
  • 打赏
  • 举报
回复
引用 4 楼 zhanglei5415 的回复:
使用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];
刚刚试试了下你的代码,还是不行,无论图片大小多少,返回的都只是1015字节,应该就是基本的头信息,英文的目录就没问题。。。依然不行,我估计可能是Apache的解码和ios代码的编码方式不一样导致的。。
ReyZhang 2014-08-31
  • 打赏
  • 举报
回复
使用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];
caewow 2014-08-31
  • 打赏
  • 举报
回复
编 码 问 题 吧 ?
养乌龟的hx 2014-08-31
  • 打赏
  • 举报
回复
引用 1 楼 zhangao0086 的回复:
把中文转码后在浏览器访问能访问到吗
ie浏览器可以,mac os的google chrome就不行
Bannings 2014-08-30
  • 打赏
  • 举报
回复
把中文转码后在浏览器访问能访问到吗

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧