Назад | Перейти на главную страницу

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

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

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

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

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

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

PS: UTF-16 - это другое животное, особенно потому, что он может ВЫГЛЯДИТЬ как совершенно нормальный текст ASCII для некоторых инструментов, будет выглядеть пустым для других и будет бесконечно сбивать с толку других (я видел некоторые версии perl, читающие и записывающие его отлично и полностью не соответствует тексту с регулярными выражениями ...)