• iOS请求URL 中文转译

    2019-06-10 13:55:34
    URL转译 stringByAddingPercentEscapesUsingEncoding(只对 `#%^{}[]|"<> 加空格共14个字符编码,不包括”&?”等符号), ios9将淘汰。 建议用stringByAddingPercentEncodingWithAllowedCharacters方法 //...

    URL转译 stringByAddingPercentEscapesUsingEncoding(只对 `#%^{}[]|"<> 加空格共14个字符编码,不包括”&?”等符号), ios9将淘汰。 建议用stringByAddingPercentEncodingWithAllowedCharacters方法

    //中文链接
    NSString *globalURL = [[NSString alloc]initWithFormat:@"http://127.0.0.1:%d/oa/workflow/submit/workflow?requestId=181193&userNumber=01281209&type=submit&remark=这是个什么鬼啊,这是个神",ListenPort];
    //iOS9.0废弃方法
    //NSString * encodingString = [globalURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    //转译后的链接
    NSString * encodingString = [globalURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    复制代码

    stringByAddingPercentEncodingWithAllowedCharacters需要传一个

    NSCharacterSet对象(关于  NSCharacterSet 这篇 文章说的很好)

    如[NSCharacterSet  URLQueryAllowedCharacterSet]

    @interface NSCharacterSet (NSURLUtilities)
    // 预定义字符集用于六个URL组件和子组件,它们允许百分比编码。 
    - (nullable NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters
    
    // 包含URL用户子组件中允许的字符的字符集
    @property (class, readonly, copy) NSCharacterSet *URLUserAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    // 包含URL密码子组件中允许的字符的字符集
    @property (class, readonly, copy) NSCharacterSet *URLPasswordAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    // 包含URL的主机子组件中允许的字符的字符集
    @property (class, readonly, copy) NSCharacterSet *URLHostAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    // 返回一个包含字符的字符集允许URL的路径组件。字符“;”是一种合法的路径,但是建议最好是percent-encoded兼容NSURL(-stringByAddingPercentEncodingWithAllowedCharacters:percent-encode任何‘;’字符如果你通过URLPathAllowedCharacterSet)
    @property (class, readonly, copy) NSCharacterSet *URLPathAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    // 包含URL查询组件中允许的字符的字符集
    @property (class, readonly, copy) NSCharacterSet *URLQueryAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    // 包含URL片段组件中允许的字符的字符集
    @property (class, readonly, copy) NSCharacterSet *URLFragmentAllowedCharacterSet API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    
    @end
    
    编码字符范围
    URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
    URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
    URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
    URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
    URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
    URLUserAllowedCharacterSet      "#%/:<>?@[\]^`
    复制代码

    END

    展开全文
  • 今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”转义了。 解决方法如下: 方法一、修改客户端,将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这样参数传到...

    网上很多解决方法,但是前提是get请求(或者是post请求后面追加的参数),让我试了很久(我是post),没成功!引以为戒!!

     

    今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了。

    解决方法如下:

    方法一、修改客户端,将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这样参数传到服务器端时就能得到“+”了。

    方法二、修改服务器端,将空格替换为“+”,这种方式只适用于参数中有‍“+”没有空格的情况。

    例子:

    String a = reuqest.‍getParameter("clientStr")‍.replace(' ','+');

    如果客户端为clientStr=test+OK,那么a的值为test+OK;

    方法三、修改服务器端,将获取参数的方法由‍reuqest.‍getParameter改为‍request.getQueryString().substring(0),然后对得到的字符串进行解析。

    例子:

    ‍‍String a =request.getQueryString().substring(0);

    ‍如果客户端为clientStr=test+OK,那么a的值为‍clientStr=test+OK,需要再解析一下,

    a=a.‍substring(10);得到a的值为‍test+OK。

    附:一个JS,用来转义URL中特殊字符的。

    ‍function URLencode(sStr)
    {
        return escape(sStr).replace(/\+/g, '+').replace(/\"/g,'"').replace(/\'/g, ''').replace(/\//g,'/');
    }

     

    还一种方案 --我用的

    encodeURIComponent(querySql);

    strURL = "search.do?param=" + encodeURIComponent(str);


    普通的传参出现乱码问题,可使用encodeURI来转译,它会转译成UTF-8的格式;
    strURL = "search.do?param=" + encodeURI(str);

    转载于:https://www.cnblogs.com/wuyun-blog/p/5796408.html

    展开全文
  • iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别。 NSString *_urlString = @...
    在iOS开发中,使用NSURLConnection去请求google places api时,如果请求的url中包含中文,则返回的结果为空,URL不能被google识别。
    NSString *_urlString = @"http://maps.googleapis.com/maps/api/geocode/json?address=南京&sensor=true";    
    NSURL *_url = [NSURL URLWithString:_dataString];
    NSMutableURLRequest *_request = [NSMutableURLRequest requestWithURL:_url];

    我将url字符串转码一下,也不能识别。
    转码方法一:    
    NSString * _dataString = [[NSString alloc] initWithData:[_urlString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding];
    转码方法二:    
    NSString * _dataString=[NSString stringWithUTF8String:[_urlString UTF8String]];

    这个问题其实是URL编码和解码问题。
    IPHONE下可以使用stringByAddingPercentEscapesUsingEncoding来编码。    
    _urlString=[_urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"Address URL: %@",_urlString);


    但是,在实际使用中,编码后的URL仍然可能会无效。因为URL的编码方式并不唯一。参见:Encode-Compare 和 URLEncoding
    NSString* escapedURLString = [unescapedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
    不同的编码方式下,有些字符不会被编码。

    所以,客户端使用什么样的编码方式应该和服务器端的解码方式配对。

    可以使用CFURLCreateStringByAddingPercentEscapes编码URL中参数部分后,再用前面stringByAddingPercentEscapesUsingEncoding编码,应该可以适应多数解码方式。

    请求的URL中,还会有很多转义符,也需要处理。

    NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)yourtext, NULL, (CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);

    附上一些常用的转义处理:

    Javascript下:
    转义字符: ‘\’
    $转义为\$

    XML下:
    & —-> \&
    < —-> &lt;
    > —-> &gt;
    ‘ —-> &apos;
    ” —-> &quot;

    SQL下(MS Access):
    # —-> ##
    ! —-> !!
    ‘ —-> ”

    在基于SOAP的HTTP服务请求时,经常需要将XML格式的请求信息转义。
    展开全文
  • iOS URL中含有中文和转义字符时的处理 转载 2014年09月03日 13:32:57 3751 今天发现一个蛋疼的问题,服务端返回的urlString里面有时含有中文,使用 [NSURL URLWithString:urlString]生成...

    iOS URL中含有中文和转义字符时的处理

    转载 2014年09月03日 13:32:57

    今天发现一个蛋疼的问题,服务端返回的urlString里面有时含有中文,使用

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

       方法1:

    NSString* encodedString = [urlStringstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


       方法2:

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


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

       

       查看方法2参数说明:

    CFStringRefCFURLCreateStringByAddingPercentEscapes(CFAllocatorRefallocator, CFStringRef originalString, CFStringRefcharactersToLeaveUnescaped, CFStringReflegalURLCharactersToBeEscaped, CFStringEncoding encoding);


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

        NSString *encodedString = (NSString *)

        CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                                (CFStringRef)urlString,

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

                                                NULL,

                                                kCFStringEncodingUTF8);



    如果在所有的类里都要用到这个方法,可以写成category,然后在头文件import "NSString+URL.h" 即可调用.


    NSString+URL.h  文件

    [html] view plaincopy
    1. @interface NSString (URL)  
    2. - (NSString *)URLEncodedString;  
    3. @end  


    NSString+URL.m  文件
    1. #import "NSString+URL.h"  
    2.   
    3. @implementation NSString (URL)  
    4.   
    5. - (NSString *)URLEncodedString  
    6. {  
    7.     NSString *encodedString = (NSString *)  
    8.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
    9.                                             (CFStringRef)self,  
    10.                                             (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",  
    11.                                             NULL,  
    12.                                             kCFStringEncodingUTF8);  
    13.     return encodedString;  
    14. }  
    15. @end  

    调用方法:

        NSString *encodedString = [urlString URLEncodedString];

        //encodedString do something


    展开全文
  • url = [NSString stringWithFormat:@"http://%@",self.selectedStr];  NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
     url = [NSString stringWithFormat:@"http://%@",self.selectedStr];
      NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                (CFStringRef)url,
                                                                (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
                                                                NULL,
                                                                kCFStringEncodingUTF8));
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:encodedString]];
    //[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]
    展开全文
  • IOS URL 转义方法

    2014-04-15 18:00:36
    此文章转自:http://blog.sina.com.cn/s/blog_b6e3f3710101ckvu.html
  • 当发送网络请求: 确定请求路径URL 时, 观察url中是否包含中文, 如果包含中文 需要将url中的中文进行转码操作. 注意:  上面这种情况 只针对于发送GET请求,因为GET请求的URL 包含用户名和密码. POST请求的用户名和...
  • 方法1: //这个方法被废弃了  NSString *urlString = @"https://www.cnblogs.com/huaida/#/... NSString* encodedString1 = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; ...
  • 我的版本url_launcher: ^4.0.1 flutter ios端崩溃,控制台打印如下错误: *** First throw call stack: ( 0 CoreFoundation 0x00007fff23c7127e __exceptionPreprocess + 350 1 libobjc.A.dylib ...
  • 通常我们在拼接网络请求Url的时候,比如请求网络图片,通过get方法请求网络数据,有时会遇到请求失败的问题,于是各种找原因,就是不明白问题出在哪里。我也是遇到了这种问题最后才发现我本来请求接口里有个“+”,...
  • iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。现在以"?!@#$^&%*+,:;='\"` 原字符...
  • iOSURL编码问题

    2014-05-17 19:50:45
    iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。 在 Java、.net 和 JS 中都有...
  • 原文链接:...今天做项目的时候遇到,需要把汉字放进url,例如http://lolbox.duowan.com/phone/apiCheckUser.php?action=getPlayersInfo&serverName=电信十四&target=蛋壳儿  但是直接这样请求的话
  • 最近在Xcode7中,即iOS9.0,发现之前的一个方法已经不被建议使用了。该方法名即题目中提到的:stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 这个方法是用来进行转码的,即将汉字转码。可在iOS...
  • url中的转义字符

    2018-12-24 16:05:44
    空格 - %20 " - %22 # - %23 % - %25 &amp; - %26 ( - %28 ) - %29 + - %2B , - %2C / - %2F : ...
  • iOS开发之--URL 编码

    2013-11-15 15:05:00
    iOS 程序访问 HTTP 资源时需要对 URL 进行 Encode,比如像拼出来的 http://unmi.cc?p1=%+&sd f&p2=中文,其中的中文、特殊符号&%和空格都必须进行转译才能正确访问。 在 Java、.net 和 JS 中都有...
  • URL空格转译

    2016-05-03 12:05:48
    今天加载web页 要求附带参数版本信息 显示如:IOS 1.1.0 需要中间空一格空格 最开始的时候使用直接字符串拼接中str直接使用空一格的方式 但结果...试验后得到结论 Url中的空格 用+号代替 可行!! 特此记录!
  • iOSurl中文编码问题

    2013-06-05 10:20:32
    由于url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符进行编码,但是...
  • <转>iOS 学习资料整理

    2015-11-13 09:14:29
    阅读目录 视频教程(英文) 视频教程(中文) 书籍 博客 ...这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的
1 2 3 4 5 ... 20
收藏数 442
精华内容 176
热门标签
关键字:

+号url转译 ios