runewalsh писал(а):У них выставлен старший бит и это валидная UTF-8.
Например, "D0 BE" = "Рѕ". Почему ANSI-текст не может иметь пары символов "Рѕ"? В KOI8/CP1251,CP866 ни коем образом не запрещен старший бит, и его установка в единицу ни как Вам не скажет, что тут именно UTF-8, а не CP1251. Вы можете написать эвристический анализ, смотреть на частоту и периодичность появления байта "D0", и т.п. Но это в любом случае не гарантирует точности идентификации, например, если в Вашем файле русские буквы или спец-значки будут встречаться редко.
Добавлено спустя 8 минут 46 секунд:
runewalsh писал(а):Любая последовательная обработка. Вывод или там конвертирование. Если тебе нужно индексировать БОЛЬШИЕ строки, имеет смысл загружать их по частям, а не тратить 3/4 памяти на нули. Не мешай переменные на стеке размером с регистр и кодировки строк, это совершенно разные вещи.
runewalsh писал(а):Можно указатель на первый символ передавать, прикинь. Обычно итерирования достаточно.
1. Вы приведите пример реального паскалевского кода, который реализует Вашу идею итерирования в реальности.
2. Какие есть задачи последовательной обработки текстовых файлов, кроме как их считывание в некую структуру (структуру классов)?
3. Если все используемые строки легко помещаются в оперативную память, то для каких это целей я должен ухищряться, усложнять алгоритм, загружая строки по частям. Не велика ли цена использования UTF-8 в строковых типах, что он ограничивает алгоритмические возможности языка.
Да это полный бред, через 30 лет, после создания языка Паскаль некие люди ввели тип переменных, который начал требовать особых алгоритмов. Вместо расширения языка, мы его начали сужать, подгоняя его возможности под некие частные случаи.