#!/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".
Чтобы найти таких персонажей, обычно помогает меньшее, так как причудливые персонажи часто выделяются. Из контекста обычно можно сделать вывод о правильном слове для поиска. Но мы не хотим проверять шестнадцатеричным редактором, что это за байт, а потом ходить по бесконечным таблицам кодировок, чтобы найти нашего обидчика.:)
В моем случае -поскольку я был единственным человеком, имеющим физический доступ к компьютеру -, отладка -shell.service, предложенная в статье, предоставленной @PhilipCouling в его комментарии, была самым простым решением. Эта оболочка запускается достаточно рано в процессе загрузки, поэтому, если загрузка зависла, я могу переключиться на нее и исследовать проблему.