Как работает Encoding.Default в .NET?

Я читаю файл, используя:

var source = File.ReadAllText(path);

а символ © загружен неправильно.

Затем я изменил его на:

var source = File.ReadAllText(path, Encoding.UTF8);

и ничего.

Я решил попробовать использовать

var source = File.ReadAllText(path, Encoding.Default);

и он работал отлично. Затем я отладил его и попытался найти, какая кодировка сделала трюк, и я обнаружил, что это было UTF-7.

Что я хочу знать:

Рекомендуется ли использовать Encoding.Default, и может ли он гарантировать, что все символы файла будут прочитаны без проблем?

Ответ 1

Encoding.Default гарантирует, что все наборы символов UTF-7 будут считаны правильно (google для всего набора). С другой стороны, если вы попытаетесь прочитать файл, не закодированный с помощью UTF-8 в режиме UTF-8, вы получите поврежденные символы, как вы.

Например, если файл закодирован UTF-16, и если вы его прочитаете в режиме UTF-16, вы будете в порядке, даже если файл не содержит одного символа UTF-16. Все это сводится к кодировке файла.

Вам нужно будет сделать сохранение - снова открыть материал с той же кодировкой, чтобы быть в безопасности от коррупции. В противном случае попробуйте использовать UTF-7 столько, сколько сможете, так как это самая компактная, но "безопасная по электронной почте" кодировка, поэтому она используется по умолчанию в большинстве платформ .NET.

Ответ 2

Не рекомендуется использовать Encoding.Default.

Цитата из MSDN:

Различные компьютеры могут использовать разные кодировки по умолчанию, и кодировка по умолчанию может даже измениться на одиночный компьютер. Поэтому данные потоковая передача с одного компьютера на другой или даже получить в разное время на том же компьютере может быть переведен неверно. К тому же, кодировка, возвращаемая по умолчанию свойство использует наилучший вариант возврата к карте неподдерживаемые символы для символов поддерживается кодовой страницей. Для этих две причины, используя кодирование обычно не рекомендуется. Чтобы гарантировать, что закодированные байты правильно декодировано, ваше приложение должен использовать кодировку Unicode, такую ​​как UTF8Encoding или UnicodeEncoding, с преамбула. Другой вариант - использовать более высокого уровня, чтобы тот же формат используется для кодирования и декодирование.

Ответ 3

Похоже, вы заинтересованы в автоматическом обнаружении кодировки файла, в какой-то ситуации, когда вы не контролируете кодировку, используемую для ее сохранения. В StackOverflow есть несколько вопросов, касающихся этого; некоторые поверхностные точки обзора Определите строковое кодирование в С# как довольно хорошее. Мой любимый ответ тот, который указывает на порт С# универсального детектора charset Mozilla.

Ответ 4

Я думаю, что файл ur находится в кодировке utf-7. Больше ничего. посетите эту страницу Ваш ответ