in TeamCity.ServiceMessages/ServiceMessageReplacements.cs [19:65]
public static string Encode([NotNull] string value)
{
if (value == null) throw new ArgumentNullException(nameof(value));
var sb = new StringBuilder(value.Length * 2);
foreach (var ch in value)
switch (ch)
{
case '|':
sb.Append("||");
break; //
case '\'':
sb.Append("|'");
break; //
case '\n':
sb.Append("|n");
break; //
case '\r':
sb.Append("|r");
break; //
case '[':
sb.Append("|[");
break; //
case ']':
sb.Append("|]");
break; //
case '\u0085':
sb.Append("|x");
break; //\u0085 (next line)=>|x
case '\u2028':
sb.Append("|l");
break; //\u2028 (line separator)=>|l
case '\u2029':
sb.Append("|p");
break; //
default:
if (ch > 127)
{
sb.Append($"|0x{(ulong)ch:x4}");
}
else
{
sb.Append(ch);
}
break;
}
return sb.ToString();
}