It's a feature.
A string is not that easy (but possible) to urlencode, since it must split it all elements, where in a TStrings or TStringList there are key=value pairs, finding a key it gets the value, and it just encodes the value.
Encoding the entire url with keys and values produces an invalid url.