diff --git a/packages/react-native/React/Base/RCTConvert.m b/packages/react-native/React/Base/RCTConvert.m index 600ff3fff47335..04247093fd9bc1 100644 --- a/packages/react-native/React/Base/RCTConvert.m +++ b/packages/react-native/React/Base/RCTConvert.m @@ -84,8 +84,16 @@ + (NSURL *)NSURL:(id)json } @try { // NSURL has a history of crashing with bad input, so let's be safe + NSURL *URL = nil; - NSURL *URL = [NSURL URLWithString:path]; +#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 170000 + if (@available(iOS 17.0, *)) { + NSString *decodedPercentPath = [path stringByRemovingPercentEncoding]; + URL = [NSURL URLWithString:decodedPercentPath encodingInvalidCharacters:YES]; + } +#endif + + URL = URL ?: [NSURL URLWithString:path]; if (URL.scheme) { // Was a well-formed absolute URL return URL; }