Вход в экстренную оболочку во время загрузки

#!/bin/bash
#
# Search in a file, a known (part of a ) String (i.E.: Begrüßung),
# by testing all encodings
#
[[ $# -ne 2 ]] && echo "Usage: encoding-finder.sh FILE fUnKy_CHAR_FOR_SURE_IN_FILE" && exit
FILE=$1
PATTERN=$2
for enc in $( iconv -l | sed 's/..$//') 
do 
    iconv -f $enc -t UTF-8 $FILE  2>/dev/null | grep -m 1 $PATTERN && echo $enc 
done 

Если я получу файл, который содержит, например, слово Begrung, я могу сделать вывод, что может иметься в виду Begrüßung. Поэтому конвертирую всеми известными кодировками и смотрю, не найдется ли такая, которая правильно конвертирует.

Обычно существует несколько подходящих кодировок.

Для более длинных файлов вы можете вырезать фрагмент вместо преобразования сотен страниц.

Так я бы назвал это

encodingfinder.sh FILE Begrüßung

и скрипт проверяет, преобразуя ли его с известными кодировками, какие из них производят "Begrüßung".

Чтобы найти таких персонажей, обычно помогает меньшее, так как причудливые персонажи часто выделяются. Из контекста обычно можно сделать вывод о правильном слове для поиска. Но мы не хотим проверять шестнадцатеричным редактором, что это за байт, а потом ходить по бесконечным таблицам кодировок, чтобы найти нашего обидчика.:)

2
02.02.2020, 18:27
1 ответ

В моем случае -поскольку я был единственным человеком, имеющим физический доступ к компьютеру -, отладка -shell.service, предложенная в статье, предоставленной @PhilipCouling в его комментарии, была самым простым решением. Эта оболочка запускается достаточно рано в процессе загрузки, поэтому, если загрузка зависла, я могу переключиться на нее и исследовать проблему.

1
28.04.2021, 23:24

Теги

Похожие вопросы