Я хочу открывать любой файл так, как будто он utf-8. При этом в реальности там может быть смесь двоичных данных и utf-8. Хочу алгоритм, который будет читать любой файл без потери данных, а utf-8 читать как последовательность символов юникода.
Предлагается такой алгоритм:
Пытаемся читать символ юникода. Если получилось, то ок. Если не получилось, то мы прочитали сколько-то (не более 5-6) байт, и дальше поняли, что что-то пошло не так. В этом случае, мы для каждого байта возвращаем знак-заменитель U+FFFD � , а за ним символ юникода с кодом, численно равным этому байту (как 8-разрядному беззнаковому целому). Если попался просто знак-заменитель, то мы его удваиваем. В итоге, независимо от того, является ли данный поток правильным utf-8, с ошибками, или вообще не utf-8, наш «чтец» вернёт всю информацию, которая была в потоке, без потерь.
Вопросы:
- не изобрёл ли я велосипед?
- нужно ли что-то делать с особыми кодами, U+FFFE, U+FFFF?
- какие грабли я не предусмотрел?