28 if (input ==
null) {
return ""; }
29 var len = input.Length;
30 var illegalCharacters =
new List<int>(len);
32 for (i = 0; i < len; i++)
34 if (
char.IsSurrogate(input[i]))
36 if (i + 1 < input.Length &&
char.IsSurrogatePair(input[i], input[i + 1]))
44 illegalCharacters.Add(i);
48 if (input[i] < 0x9 || input[i] > 0xA && input[i] < 0xD || input[i] > 0xD && input[i] < 0x20 || input[i] > 0xD7FF && input[i] < 0xE000 || input[i] > 0xFFFD)
50 illegalCharacters.Add(i);
54 if (illegalCharacters.Count == 0)
59 var sb =
new StringBuilder(len);
61 len = illegalCharacters.Count;
62 for (i = 0; i < len; i++)
64 sb.Append(input.Substring(lastIndex, illegalCharacters[i] - lastIndex));
66 lastIndex = illegalCharacters[i] + 1;
68 sb.Append(input.Substring(lastIndex));