В данном случае это не так заметно, как в моем случае. Сегодня я попытался скопировать данные из буфера обмена, но было несколько символов Юникода. Я получил данные, как если бы я читал файл в кодировке UTF-8 в кодировке Windows-1250 (локальная кодировка в моей Windows) .
Кажется, ваш случай тот же. Если вы сохраняете html-данные (не забудьте поставить неразрывный пробел = 0xa0 после символа Â, а не стандартного пробела) в Windows-1252 (или Windows-1250; оба работают) . Затем откройте этот файл как файл UTF-8, и вы увидите, что там должно быть.
Для моего другого проекта я сделал функцию, которая исправляет данные с поврежденной кодировкой.
В этом случае достаточно простого преобразования:
byte[] data = Encoding.Default.GetBytes(text);
text = Encoding.UTF8.GetString(data);
Моя первоначальная функция немного сложнее и содержит тесты, чтобы убедиться, что данные не повреждены ...
public static bool FixMisencodedUTF8(ref string text, Encoding encoding)
{
if (string.IsNullOrEmpty(text))
return false;
byte[] data = encoding.GetBytes(text);
// there should not be any character outside source encoding
string newStr = encoding.GetString(data);
if (!string.Equals(text, newStr)) // if there is any character "outside"
return false; // leave, the input is in a different encoding
if (IsValidUtf8(data) == 0) // test data to be valid UTF-8 byte sequence
return false; // if not, can not convert to UTF-8
text = Encoding.UTF8.GetString(data);
return true;
}
Я знаю, что это не самое лучшее (или правильное решение) , но я не нашел другого способа исправить входные данные ...
РЕДАКТИРОВАТЬ : (20 июля 2017 г.)
Похоже, что Microsoft уже нашла эту ошибку, и теперь она работает правильно. Я не уверен, что проблема в каких-то фреймворках, но я точно знаю, что теперь приложение использует другой фреймворк, как во время, когда я писал ответ. (сейчас это 4.5; предыдущая версия была 2.0)
(Теперь весь мой код не может выполнить синтаксический анализ данных. Есть еще одна проблема, связанная с определением правильного поведения приложения с уже исправленным исправлением и без исправления.)