在使用网络请求的时候我们常常需要URL.URL构成有如下规则:
-
字母字符a-z A-Z
-
-_~.四个特殊字符(右脸有颗痣的笑脸)
-
0-9数字
-
! * ' ( ) ; : @ & = + $ , / ? # [ ]保留字符
-
%编码标记符
所以,如果你的URL中有中文,直接放在网络请求中就会崩溃,此时你就需要编译一下
比如url = "
https://itunes.apple.com/cn/app/我的应用/id1291676834?mt=8
", 其中的"我的应用"就不符合URL规则,此时我们就需要编码才可以进行请求,否则会直接奔溃哟。
let url = "https://www.google.com/search?q=成都市"
//let url = appStoreURL.addingPercentEscapes(using: String.Encoding.utf8) //iOS7之前
let newUrl = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! // iOS 9之后。
print("编码过后的url:\(newUrl)") //编码过后的url:https://www.google.com/search?q=%E6%88%90%E9%83%BD%E5%B8%82
编码和解码关系是一一对应,也需要按照URL规则解码
let originUrl = newUrl.removingPercentEncoding!
print("解码后的url:\(originUrl)") //解码后的url:https://www.google.com/search?q=成都市
【Objective-C】
system version < iOS 9
NSString *newUrlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//该方法iOS 9 已经废弃了 但是如果你的项目需要兼容到iOS8或之前建议还是使用此方法
>= iOS 9
NSString *newUrlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
避免出现重复编码出错问题(建议使用)
-(NSString *)URLEncodedString:(NSString *)str
NSString *encodedString = (NSString *)
CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)str,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8));
return encodedString;
-(NSString *)URLDecodedString:(NSString *)str
NSString *decodedString=(__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (__bridge CFStringRef)str, CFSTR(""), CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
return decodedString;
iOS URL含有中文处理【Swift版本】在此之前,建议了解“全面深度解析iOS端URL编码和解码过程”, 会对URL有一个详细的认识。一、编码在使用网络请求的时候我们常常需要URL.URL构成有如下规则:字母字符a-z A-Z -_~.四个特殊字符(右脸有颗痣的笑脸) 0-9数字 ! * ' ( ) ; : @ & = + $ , / ? # [ ]保留字符...
let pathStr = String.init(format:"%@?keyword=%@",Shop_NearWordList,work)
let contentEncode = pathStr
.addingPercentEncoding(withAllowedCharacters: .
urlQueryAllowed)!
最近升级第三方jar包后,导致许多问题,原来
url 地址
含有汉字问题,window和linux都可以正常解析,fastjson升级后,window可以正常应用,LInux无法解析,没有响应返回,直接导致系统退出。
Swift4.0 URLString内有汉字转解码方法
let str = "https://www.zoesacc.com/?d=萨达吧"
let fuck = str.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let ooo = fuck?.removingPercentEncodin...