if (UriHelper.HasCharactersToNormalize (uriString))
formatFlags |= UriHelper.FormatFlags.HasUriCharactersToNormalize;
+ if (userEscaped)
+ formatFlags |= UriHelper.FormatFlags.UserEscaped;
+
// from here we're practically working on uriString.Substring(startpos,endpos-startpos)
int startpos = pos + 1;
int endpos = uriString.Length;
HasUriCharactersToNormalize = 1 << 1,
HasHost = 1 << 2,
HasFragmentPercentage = 1 << 3,
+ UserEscaped = 1 << 4,
}
[Flags]
private static string FormatChar (char c, bool isEscaped, UriSchemes scheme, UriKind uriKind,
UriComponents component, UriFormat uriFormat, FormatFlags formatFlags)
{
- if (!isEscaped && NeedToEscape (c, scheme, component, uriKind, uriFormat, formatFlags) ||
- isEscaped && !NeedToUnescape (c, scheme, component, uriKind, uriFormat, formatFlags))
+ var userEscaped = (formatFlags & FormatFlags.UserEscaped) != 0;
+ if (!isEscaped && !userEscaped && NeedToEscape (c, scheme, component, uriKind, uriFormat, formatFlags) ||
+ isEscaped && (userEscaped || !NeedToUnescape (c, scheme, component, uriKind, uriFormat, formatFlags)))
return HexEscapeMultiByte (c);
if (c == '\\' && component == UriComponents.Path) {