31 июля 2023

Улучшение поддержки файлов формата UTF-8 без BOM в Delphi 12

    Одна из проблем, с которыми сталкиваются программисты на Delphi при чтении текстового файла – это определение его кодировки. Метод TEncoding.GetBufferEncoding работает корректно только если файл содержит метку порядка байтов (Byte Order Mark, BOM) для одной из стандартных кодировок. Если переданный в него буфер не содержит BOM, то возвращается кодировка по умолчанию. TEncoding.Default зависит от операционной системы. Например, для Windows – это ANSI, Linux или macOS – это UTF-8. То есть при отсутствии в текстовом файле BOM задача определения его кодировки (UTF-8 или ANSI или ASCII) лежит на программисте. И вот наконец-то в Delphi появился для этого свой функционал.
    Класс TEncoding в Delphi 12 получил новый метод IsBufferValid, который позволяет проверить, содержит ли буфер корректные данные для данной кодировки. Этот метод, а точнее его реализацию для класса TUTF8Encoding, можно использовать для уточнения кодировки текстового файла без BOM. TUTF8Encoding.IsBufferValid реализует быстрый кроссплатформенный алгоритм Бьорна Хорманна (Björn Höhrmann).
    Дополнительным бонусом, связанным с кодировками файлов, является добавленное в Delphi 12 свойство TEncoding.UseBOM. Оно используется при чтении и записи в поток.

Комментариев нет:

Отправить комментарий