Файл в неизвестной 8-битной кодовой странице определяется как «unknown-8bit» по какой-то причине: это непростая проблема без каких-либо представлений о язык. Не сказать, что это невозможно, но для эффективной работы такой эвристический детектор должен был обладать большим словарным запасом всех наиболее часто используемых языков, большим списком кодовых страниц и некоторой грамматикой. Обновление: никогда не пробовал enca
; возможно, это чудо-декодер, сделанный в этом роде. Но если файл представляет собой, скажем, исходный код в основном ASCII с одним или двумя словами, состоящими из октетов с высоким битом, то практически невозможно угадать язык и кодировку даже с помощью такого чудесного эвристического алгоритма. Вот почему исходный HTTP / 1.1 настоятельно настаивал на объявлении кодировки в заголовке HTTP Content-Type:
для любого типа носителя text /
*.
Итак, решение по пунктам:
head
file | iconv -f
try (предполагается, что переменная среды LANG установлена в соответствии с используемым TUI) и посмотрите, получится ли результат читабельно, до успеха. Это решение, конечно, предполагает, что текст закодирован правильно , но в неизвестной кодовой странице. Случаи, когда текст был искажен по ошибке человека или из-за сбоя программного обеспечения, не могут быть решены таким образом.
Пункты 2 и 3 могут быть автоматизированы, и такие инструменты действительно существуют, но они зависят от языка (т.е. эвристический декодер для русского языка не будет работать для японского и наоборот) или, по крайней мере, , требуется указать язык ввода (как это делает enca
).
Что касается персидского языка, возможные кодировки включают Windows-1256 (см. этот поток ), ISO8859-6 и теперь устаревшую иранскую кодировку системы . Будьте счастливы, что у вас нет списка хотя бы из семи кодовых страниц, используемых для русского языка (KOI7, KOI8, CP866, Windows-1251, ISO8859-5, MacCyrillic, MIK).
Вы можете улучшить скрипт-оболочку для определения ОС; если он работает в Linux, выполните script -c...
, но если он работает в AIX, дайте оболочке сценария -переопределенный профиль, который запускает только ваш установщик, а затем завершает работу:
$ cat myinstaller.ksh
#!/usr/bin/ksh
case $(uname -s) in
(Linux)
script -c myrealinstaller.ksh /var/log/myinstaller.log
;;
(AIX)
printf "ENV=./myrealinstaller.ksh\nexit\n" >./installer.profile
trap 'rm -f./installer.profile' INT
ENV=./installer.profile script -q./var/log/myinstaller.log
rm./installer.profile
;;
esac
Я изменил пути к скрипту и журналам, чтобы протестировать его локально. Другими вовлеченными факторами являются:
ENV
для указания на переопределенный профиль, как мы вызываемscript
script
с помощью -q
, чтобы немного успокоиться С образцом myrealinstaller.ksh из:
#!/bin/ksh
echo Hi, I am the real installer
Содержимое./var/log/myinstaller.log:
Script command is started on Thu Mar 15 09:34:04 2018.
Hi, I am the real installer
Script command is complete on Thu Mar 15 09:34:04 2018.