27 if (input ==
null) {
return ""; }
28 var len = input.Length;
29 var illegalCharacters =
new List<int>(len);
31 for (i = 0; i < len; i++)
33 if (
char.IsSurrogate(input[i]))
35 if (i + 1 < input.Length &&
char.IsSurrogatePair(input[i], input[i + 1]))
43 illegalCharacters.Add(i);
47 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)
49 illegalCharacters.Add(i);
53 if (illegalCharacters.Count == 0)
58 var sb =
new StringBuilder(len);
60 len = illegalCharacters.Count;
61 for (i = 0; i < len; i++)
63 sb.Append(input.Substring(lastIndex, illegalCharacters[i] - lastIndex));
65 lastIndex = illegalCharacters[i] + 1;
67 sb.Append(input.Substring(lastIndex));