Как Encoding.Default работает в .NET? - PullRequest
13 голосов
/ 15 мая 2011

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

var source = File.ReadAllText(path);

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

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

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

и ничего.

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

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 15 мая 2011

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

Цитата из MSDN:

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

8 голосов
/ 15 мая 2011

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

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

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

4 голосов
/ 15 мая 2011

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

0 голосов
/ 15 мая 2011

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

...