无意中遇到一个问题,项目中使用UIWebView
打不开web
界面,检查过URL
和代码,发现并没有问题。随考虑到一点:URL中包含汉字。
处理如下:
NSString *URLString = [NSString stringWithFormat:@"%@id=%@&email=%@",ProviderOrder,self.orderID,emailStr];
//方法是用来进行转码的,即将汉字转码
NSString *encodedString1 = [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
//该方法用来进行转码的,即将汉字转码(在Xcode7中,iOS9)
//NSString *encodedString = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url =[NSURL URLWithString:[NSString stringWithFormat:@"%@",encodedString1]];
self.webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
self.webView.delegate = self;
NSURLRequest *request = [NSURLRequest requestWithURL:url ];
[self.webView loadRequest:request];
[self.view addSubview:self.webView];
上面为什么推荐使用
(NSString *)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters
,
这里是文档中给出的解释:
其一:
Use -stringByAddingPercentEncodingWithAllowedCharacters: instead,
which always uses the recommended UTF-8 encoding,
and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid.
翻译如下:
使用-stringByAddingPercentEncodingWithAllowedCharacters:
改为,
它总是使用推荐的UTF-8
编码,
并且其对特定的URL组件或子组件进行编码,因为每个URL组件或子组件对于什么字符是有效的具有不同的规则。
其二:
Returns a new string made from the receiver by replacing all characters not in the allowedCharacters set with percent encoded characters.
UTF-8 encoding is used to determine the correct percent encoded characters.
Entire URL strings cannot be percent-encoded.
This method is intended to percent-encode an URL component or subcomponent string, NOT the entire URL string.
Any characters in allowedCharacters outside of the 7-bit ASCII range are ignored.
翻译如下:
通过替换不在allowedCharacters
中的所有字符,使用百分比编码字符返回从接收器创建的新字符串。 UTF-8编码用于确定正确的百分比编码字符。 整个URL字符串不能进行百分号编码。 此方法旨在对URL组件或子组件字符串(而不是整个URL字符串)进行百分比编码。 将忽略7位ASCII范围之外的allowedCharacters
中的任何字符。
网友评论