LINUX: Может ли файл, отображаемый в виде текста ASCII, содержать данные UTF-8

Версия LINUX Red Hat Enterprise Linux ES выпуск 4

Мне нужно подтвердить, правильно ли выписка из базы данных содержит данные в кодировке UTF-8. Я создал файл, используя механизм, указанный поставщиком базы данных, но когда я сделал

$ file extract.txt 

он вернулся

ASCII text, with very long lines

Однако, когда я создал вложенный файл из основного файла извлечения и сделал

$ file sub_extract.txt

он вернулся

UTF-8 Unicode text, with very long lines

Поэтому мой файл на самом деле в порядке, и есть некоторые ограничения команды file? Есть ли лучший способ проверить, содержит ли файл данные UTF-8?

2 ответа

Команда file использует только начало файла для проверки его содержимого (по соображениям производительности). Если ваш файл в начале содержит только символы ascii, команда file сообщает о файле как ASCII.

Если извлеченный файл содержит символы UTF-8 в начале (или заголовок спецификации), команда сообщает о файле как UTF-8 (как во втором примере).

См. Справочную страницу файла для получения дополнительной информации о магических числах и заголовках файлов.

Если вы экспортируете базу данных, которая содержит только английский текст и общие управляющие символы, и будут кодировать любые двоичные данные, например, в BASE64 при экспорте, ASCII и UTF-8 будут ТОЧНО одинаковыми, если не существует явной спецификации.

PS: UTF-16 - это другое животное, особенно потому, что он может СМОТРЕТЬ, как совершенно нормальный текст ASCII, на некоторые инструменты, будет выглядеть пустым для других и беспорядочно смешивать другие (я видел некоторые версии perl, читающие и пишущие его). хорошо и совершенно не соответствует тексту с регулярными выражениями...)

Другие вопросы по тегам