LINUX.ORG.RU
ФорумAdmin

Неверное определение кодировки текста с помощью file

 , , ,


0

2

Приветствую.

Есть файл 'name.txt' с кириллицей:

file -i name.txt
name.txt: text/plain; charset=iso-8859-1

Выполняю:

iconv -f iso-8859-1 -t utf-8 -o name2.txt name.txt
-- получаю в файле «name2.txt' кодировку 'charset=utf-8' и ... нечитаемый русский текст.

Если выполняю:

iconv -f  windows-1251 -t utf-8 -o name2.txt name.txt
-- получаю в файле 'name2.txt' кодировку 'charset=utf-8' и всё хорошо.

Получается, команда 'file -i' неверно определяет кодировку файла? Или в чем дело?


Эта утилита читает небольшую часть файла. Если файл начинается с латиницы, то до кириллицы оно может и не дочитать.

legolegs ★★★★★ ()

Получается, команда 'file -i' неверно определяет кодировку файла? Или в чем дело?

Да. Это норма. Байты-то одни и те же, различается только их интерпретация. Вот, например, байт 0xD7 - это U+00D7 × MULTIPLICATION SIGN или U+0427 Ч CYRILLIC CAPITAL LETTER CHE? Ответить на этот вопрос в общем случае можно только неточно, используя распределение значений байт по частотам и предположения о языке, на котором написан текст.

anonymous ()
Ответ на: комментарий от Deleted

Да, знаю, спасибо.

Но там тоже не все так просто )

Есть еще один текстовый файл (у меня их много))) 'namename.txt' и там:

enca -m namename.txt
unknown

Хотя:

enca -i namename.txt
MACCYRILLIC

Однако, если:

iconv -f  windows-1251 -t utf-8 namename.txt

То он в 'utf-8' и всё хорошо.

mexx ()
Ответ на: комментарий от anonymous

Байты-то одни и те же, различается только их интерпретация.

Разумно. Однако:

enca -m name.txt
windows-1251

То есть 'enca' то те же байты интепретирует верно.

mexx ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.