iOS 的url中含有中文解决方法

作者: _lijinglong | 来源:发表于2015-08-19 16:23 被阅读14844次

[NSURLURLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题.

方法1:

NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

方法2:

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);

这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.

查看方法2参数说明:

CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator,CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped,CFStringEncoding encoding);

因此做出修改,写出方法:

NSString *encodedString = (NSString *)

CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

(CFStringRef)urlString,

(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",

NULL,

kCFStringEncodingUTF8);

相关文章

网友评论

  • MoussyL:楼主用你的方法依然解决不了 ,能帮忙看下吗?
    %3F%3F%20Microsoft%20Word%20%3F%3F%20(2).docx
    这是个文档的名字,未编码应该是:新建 Microsoft Word 文档 (2).docx
    我现在是想encode,试了很多方法都不管用有的空格显示出来了,但是汉字解不出来,有没有好的方法? :pray:
  • 卧龙小:后台需要改不?
  • FLNuo:NSString *urlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    该更新了
    金银岛:@原野de呼唤 确实,二楼的这个方法并没有避免"如果其中含有已转义的%等符号时,又会再次转义而导致错误."这个问题,你的回答亲测对我有效😝
    原野de呼唤:@FLNuo 你说这个方法不解决问题啊,我用楼主的方法后系统提示修改成了下面这样就决绝问题了, 请教
    model.roomPicture = (NSString *)

    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

    (CFStringRef)model.roomPicture,

    (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",

    NULL,

    kCFStringEncodingUTF8));

本文标题:iOS 的url中含有中文解决方法

本文链接:https://www.haomeiwen.com/subject/jffgqttx.html