Проблема StreamReader - Неизвестная кодировка файла (западный ISO 88591) - PullRequest
2 голосов
/ 16 декабря 2008

При чтении данных из входного файла я заметил, что символ Stream не читался StreamReader. Mozilla Firefox показал тип входного файла как западный (ISO-8859-1).

После игры с параметрами кодирования я обнаружил, что он успешно работает для следующих значений:

System.Text.Encoding.GetEncoding(1252) // (western iso 88591)

System.Text.Encoding.Default 

System.Text.Encoding.UTF7

Теперь я планирую использовать настройку «По умолчанию», однако я не очень уверен, что это правильное решение. Существующий код не использовал никакой кодировки, и я беспокоюсь, что могу что-то сломать.

Я очень мало знаю (или скорее ничего) о кодировании. Как мне это сделать? Мое решение использовать System.Text.Encoding.Default безопасно? Должен ли я попросить пользователя сохранить файлы в определенном формате?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2008

Кодовая страница 1252 отличается от ISO-Latin-1. Если вы хотите ISO-Latin-1, используйте Encoding.GetEncoding(28591). Однако я ожидаю, что они будут одинаковыми для этой кодовой точки (U + 00A5). UTF-7 совершенно другой (и почти никогда не тот, который вы хотите использовать).

Encoding.Default является небезопасным - это действительно плохая идея в большинстве ситуаций. Это зависит от конкретного компьютера, на котором вы работаете. Если вы перенесли файл с одного компьютера на другой, кто знает, какую кодировку использовал исходный компьютер?

Если вы знаете, что ваш файл соответствует ISO-8859-1, тогда явно используйте его. Что производит эти файлы? Если они просто сохраняются пользователем, в какой программе они сохраняются? Если вариант UTF-8 - хороший вариант, отчасти потому, что он может справиться со всем Unicode.

У меня есть статья по Unicode и еще одна по отладка проблем Unicode , которая может оказаться полезной.

2 голосов
/ 16 декабря 2008

Существующий код не использовал никакой кодировки

Возможно, явно не указана кодировка, в этом случае кодировка, вероятно, по умолчанию установлена ​​в Encoding.UTF8.

Название Encoding.Default может создать впечатление, что это кодировка по умолчанию, используемая такими классами, как StreamReader, но это не так: как отметил Джон Скит, Encoding.Default - это кодировка для текущего ANSI операционной системы кодовая страница.

Лично я думаю, что это делает имя свойства Encoding.Default несколько вводящим в заблуждение.

1 голос
/ 16 декабря 2008
...