处理这个问题的初衷是:后端返回的用于跳转web页面的URL含有中文,WKWebView在加载包含中文的URL时发生了转义而无法加载只是显示空白页面。需要对包含中文的URL进行编码处理以防止发生转义。
处理方式很简单:
- (NSString*)urlEncode:(NSString*)urlString {
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
? ? NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (CFStringRef)urlString,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? kCFStringEncodingUTF8));
? ? returnencodedString;
#pragma clang diagnostic pop
}
- (NSString*)urlDecode:(NSString*)urlString? {
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
? ? ? ? CFStringEncoding en = CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding);
? ? ? ? NSString *decoded = [urlString stringByReplacingOccurrencesOfString:@"+"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? withString:@" "];
? ? ? ? decoded = (__bridge_transferNSString*)
? ? ? ? CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (__bridgeCFStringRef)decoded,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CFSTR(""),
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? en);
? ? ? ? returndecoded;
#pragma clang diagnostic pop
}
对需要编码处理的URL进行编码处理即可,例子如下:
NSString *urlStr = @"pay-zto-test.zt-express/cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&payTypeCode=TC0036&payMethodCode=10002&recipientName=中通快递&platform=txkdg";
?NSString*encodeString = [self urlEncode:urlStr];
NSLog(@"编码encodeString===%@",encodeString);
打印结果为: pay-zto-test.zt-express/cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&payTypeCode=TC0036&payMethodCode=10002&recipientName=%E4%B8%AD%E9%80%9A%E5%BF%AB%E9%80%92&platform=txkdg
需要解码回中文的话字节调用解码方法即可。
在翻译之前 我先要告诉LZ文中的 セブンイレブン==》seven eleven==》超市的名称 这个超市在中国貌似只有北京有 但是在日本满街都是 LZ所要翻译的应该是网上购物的付款单吧。 进入正题:
支付方法到セブンイレブン(上面有解释过了)付款
在这之前支付票会在mail上发送给您
请打印支付票后到附近的セブンイレブンレジ支付款项
请在有效期限内支付完成。我们在确认付款后会发送货物。
积分使用方法:无
送货方法:乐天国际送货物品(请将其用英文记录在案)
本人也一直在日本乐天网上购物 一般付款后2~3天就能收到(如果在日本)如果还有不懂的可以发我站内信箱^^
希望以上内容对楼主有所帮助^^