public static string ConvertString(string str)
{
int i = 0;
for (; ; i++) {
if (i >= str.Length)
return str;
char c = str[i];
switch (c) {
case '"':
case '\\':
case '\0':
case '\a':
case '\b':
case '\f':
case '\n':
case '\r':
case '\t':
case '\v':
goto escapeChars;
default:
if (char.IsControl(c) || char.IsSurrogate(c) || (char.IsWhiteSpace(c) && c != ' '))
goto escapeChars;
break;
}
}
escapeChars:
StringBuilder sb = new StringBuilder();
if (i > 0)
sb.Append(str, 0, i);
for (; i < str.Length; i++) {
char ch = str[i];
if (ch == '"') {
sb.Append("\\\"");
} else {
AppendChar(sb, ch);
}
}
return sb.ToString();
}