encodeUriString
Parses raw into a URI, applying percent-encoding to any illegal characters while preserving percent-triplets that are already valid.
Tries encodeUri(URI(raw)) first, then falls back to parsing via URL (which tolerates some non-standard inputs such as unencoded spaces), and finally URI.create(raw) as a last resort.