35 private const char HighSurrogatePrefix =
'\uDBFF';
36 private const char LowSurrogatePrefix =
'\uDBFE';
41 internal static string EscapeInvalidSurrogates(
string str)
45 for (
int i = 0; i < str.Length; i++)
48 if (Char.IsLowSurrogate(c))
50 str = str.Substring(0, i) + LowSurrogatePrefix + c + str.Substring(i + 1);
53 else if (Char.IsHighSurrogate(c))
57 if (c == HighSurrogatePrefix || c == LowSurrogatePrefix || i == str.Length || !Char.IsLowSurrogate(str[i]))
59 str = str.Substring(0, i - 1) + HighSurrogatePrefix + (char)(c + 0x400) + str.Substring(i);
67 internal static string UnescapeInvalidSurrogates(
string str)
71 for (
int i = 0; i < str.Length; i++)
75 case HighSurrogatePrefix:
76 str = str.Substring(0, i) + (char)(str[i + 1] - 0x400) + str.Substring(i + 2);
78 case LowSurrogatePrefix:
79 str = str.Substring(0, i) + str[i + 1] + str.Substring(i + 2);
87 internal static string[] EscapeInvalidSurrogates(
string[] str)
91 for (
int i = 0; i < str.Length; i++)
93 str[i] = EscapeInvalidSurrogates(str[i]);
99 internal static string[] UnescapeInvalidSurrogates(
string[] str)
103 for (
int i = 0; i < str.Length; i++)
105 str[i] = UnescapeInvalidSurrogates(str[i]);