Пояснение:
Я столкнулся с крайним случаем при написании своего веб-приложения. Я принимаю файлы UTF-8 для загрузки, и у меня есть проверка, подтверждающая, что они закодированы в UTF-8 (или, по крайней мере, наилучшая возможная проверка, по-видимому, нет серебряной пули, я знаю, что есть много другие вопросы о переполнении стека для этой конкретной проблемы).
В качестве теста я взял файл в кодировке ANSI и преобразовал его в UTF-8, как (в отдельных тестах), преобразовав его в UTF-8 в Notepad++, так и просто декодировав как UTF-8 (хотя это ANSI) на летать на С#, используя Encoding.UTF.GetBytes(inputStream)
.
Где возникает проблема:
Позже я помещаю необработанные данные файла в качестве одного из элементов XML-файла. Вот где возникает проблема. Похоже, что из файла ANSI сохранился символ, который (я предполагаю) недействителен в UTF-8. Когда я пытаюсь загрузить XML с помощью следующей команды...
XDocument xmlSample = XDocument.Load(outputPath);
Я получаю это исключение...
{"Invalid character in the given encoding. Line 10, position 14."}
Это выглядит так в Visual Studio...
И вот так в Notepad++...
Ниже приведена копия и вставка персонажа.
Из NPP: ¡
Из средства просмотра строк Visual Studio: �
Вопрос:
Как я могу удалить недопустимые символы из файла в кодировке UTF-8 или, по крайней мере, обнаружить их разумным способом, чтобы я мог отклонить файл?