Вот тот, который я написал за десять минут. Он не использует регулярные выражения, только простые итерации. Я не думаю, что это может быть улучшено, чтобы быть намного быстрее.
public static String unescape(final String text) {
StringBuilder result = new StringBuilder(text.length());
int i = 0;
int n = text.length();
while (i < n) {
char charAt = text.charAt(i);
if (charAt != '&') {
result.append(charAt);
i++;
} else {
if (text.startsWith("&", i)) {
result.append('&');
i += 5;
} else if (text.startsWith("'", i)) {
result.append('\'');
i += 6;
} else if (text.startsWith(""", i)) {
result.append('"');
i += 6;
} else if (text.startsWith("<", i)) {
result.append('<');
i += 4;
} else if (text.startsWith(">", i)) {
result.append('>');
i += 4;
} else i++;
}
}
return result.toString();
}
Я не уверен, есть ли отличная оболочка .NET, но вы можете вызвать API FormatMessage с помощью P / Invoke.
См. этот ответ , чтобы узнать, как это обычно вызывается из собственного кода. Хотя вопрос относится к получению кодов ошибок из HRESULT, ответ также относится к получению кодов из обычных кодов ошибок ОС, поступающих из GetLastError / GetLastWin32Error).
РЕДАКТИРОВАТЬ: Спасибо, Малфист, что указал мне на pinvoke.net, который включает альтернативу, управляемый API:
using System.ComponentModel;
string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Console.WriteLine(errorMessage);
Да, есть функция, которая это делает, но я не помню, что это такое. В то же время вы можете использовать инструмент поиска ошибок (Инструменты-> Поиск ошибок), чтобы увидеть, что означает конкретный код из Visual Studio.