Потому что по точке надо всё стараться вызывать…
Написать:
close(fi);
Вместо:
fi.close;
Вам даёт только ради совместимости с древнепаскальными диалектами.
Но то что в случае файлов даёт - не значит что всё надо пытаться анархично писать.
Кроме всего прочего, когда вы ставите точку после переменной - вам показывает всё что с ней можно делать. Используйте эту возможность.
А он не имеет, потому что я вам уже объяснил - вы объявляете новую переменную DefaultEncoding
, вместо того чтобы присвоить существующей, которую используют стандартные подпрограммы когда кодировка не указана.