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, читающие и пишущие его). хорошо и совершенно не соответствует тексту с регулярными выражениями...)