La URL devuelta por el servidor contiene caracteres chinos para codificar y decodificar.
La intención original de solucionar este problema es que la URL devuelta por el backend para saltar a la página web contenga chino. WKWebView se escapa al cargar la URL que contiene chino y no se puede cargar, pero muestra una página en blanco. Las URL que contienen chino deben codificarse para evitar que se escapen.
El método de procesamiento es muy simple:
- (NSString*)urlEncode:(NSString*)urlString {
#pragma clang diagnostic push
#pragma clang diagnostic ignorado"-Wdeprecated-declarations"
NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)urlString,
(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
NULL,
kCFStringEncodingUTF8) );
returnencodedString;
#pragma clang diagnostic pop
}
- (NSString*)urlDecode:(NSString* )urlString ? /p >
NSString *decoded = [urlString stringByReplacingOccurrencesOfString:@"+"
withString:@" "];
decoded = (__bridge_transferNSString*)
CFURLCreateStringByReplacingPercentEscapesUsingEncoding(
NULL,
(__bridgeCFStringRef)decodificado,
CFSTR(""),
es);
returndecoded;
#pragma clang diagnostic pop
}
Simplemente codifique la URL que debe codificarse. El ejemplo es el siguiente:
NSString *urlStr = @"/cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&pay. Oda tipo C =TC0036&payMethodCode =10002&recipientName=ZTO Express&platform=txkdg";
?NSString*encodeString = [self urlEncode:urlStr];
NSLog(@"encodingencodeString===%@", encodeString );
El resultado impreso es: /cashier-static/h5/cashier?systemCode=10007&sceneCode=10025&sign=ed37f0a3a541af5aa11cd273c65f2e44&partnerOrderCode=Z1007876566test&payTypeCode=TC0036&payMethodC ode=10002&re cipientName=%E4%B8%AD%E9%80%9A % E5%BF%AB%E9%80%92&platform=txkdg
Si necesita decodificar al chino, simplemente llame al método de decodificación por byte.