Записываю в файл при помощи StreamWriter-а.
Читаю при помощи StreamReader-а.
Оба по умлочанию используют UTF-8
После записи в файле все данные корректны.
При чтении в результирующей строке вместо русских символов — пустота.
Из-за чего может возникнуть подобная проблема, и как ее можно решить?
Здравствуйте, sulik, Вы писали:
S>Записываю в файл при помощи StreamWriter-а. S>Читаю при помощи StreamReader-а. S>Оба по умлочанию используют UTF-8 S>После записи в файле все данные корректны. S>При чтении в результирующей строке вместо русских символов — пустота. S>Из-за чего может возникнуть подобная проблема, и как ее можно решить?
Проблема в UTF-8.
Попробуй в параметр encoding конструктора StreamWriter и StreamReader-ов передавать Encoding.GetEncoding(1251) или Encoding.GetEncoding(866) в зависимиости от Win / DOS кодировки файла.
Здравствуйте, Алексей Петров, Вы писали:
АП>Проблема в UTF-8. АП>Попробуй в параметр encoding конструктора StreamWriter и StreamReader-ов передавать Encoding.GetEncoding(1251) или Encoding.GetEncoding(866) в зависимиости от Win / DOS кодировки файла.
Да, видимо так. Однако, мне нужно использовать универсальную кодировку для поддержки не только русского, но потенциально любого языка.
Помогло:
new StreamReader(FStream, System.Text.Encoding.Unicode)
Блин. Видимо, UTF-8 — просто более ранняя версия Unicode?
Здравствуйте, sulik, Вы писали:
S>Записываю в файл при помощи StreamWriter-а. S>Читаю при помощи StreamReader-а. S>Оба по умлочанию используют UTF-8 S>После записи в файле все данные корректны. S>При чтении в результирующей строке вместо русских символов — пустота. S>Из-за чего может возникнуть подобная проблема, и как ее можно решить?
Такой проблемы c SR/SW нет — в простом примере все работает как должно (буквы есть).
Здравствуйте, sulik, Вы писали:
S>Блин. Видимо, UTF-8 — просто более ранняя версия Unicode?
UTF-8 относится к Unicode примерно так же, как ZIP к текстовым файлам Т.е. UTF-8 это только способ хранения Unicode-символов. Принцип такой: все символы с кодом <128 записываются одним байтом, как он есть. Т.е. простой текстовый файл, в котором только символы базового набора является валидным файлов в UTF-8. Все остальные символы записываются большим количеством байт, в зависимости от их значения.
Почему я сказал про ZIP: часто выгодно аналогичным образом хранить просто целые числа, когда потенциальные диапазон большой, а вот реальные значения обычно маленькие. Говоря формально, это кодирование в 127-ричной системе исчисления, а старший бит означает наличие следующего (старшего) разряда.
Здравствуйте, DarkGray, Вы писали:
DG>При таком вопросе лучше всего показывать код, который приводит к такой ошибке. Т.к. проблема, скорее всего, DG>в самом коде.
Возможно, хотя и маловероятно, полскольку изменение кодировки на System.Text.Encoding.Unicode решило проблему. Хотя, возможно, при использовании UTF-8 необходимо как-то по особому изощряться..