доступ ко всем элементам массива в цикле [closed]

Ваш файл содержит два байта, EB и 0A в шестнадцатеричном формате. Вероятно, файл использует набор символов с одним байтом на символ, например ISO-8859-1; в этом наборе символов EB — это ë:

$ printf "\353\n" | iconv -f ISO-8859-1
ë

Другими кандидатами могут быть δ в кодовой странице 437 , Ù в кодовой странице 850 ...

Вывод od -x в этом случае сбивает с толку из-за порядка следования байтов; лучшим вариантом является -t x1, который использует одиночные байты:

$ printf "\353\n" | od -t x1
0000000 eb 0a
0000002

od -x отображается на od -t x2, который считывает два байта за раз, а на маленьких -endian выводит байты в обратном порядке.

Когда вы сталкиваетесь с таким файлом, который не является допустимым UTF-8 (или не имеет смысла при интерпретации как файл UTF-8), не существует надежного способа автоматически определить его кодировку (и набор символов). ). Контекст может помочь: если это файл, созданный на западном ПК за последние пару десятилетий, есть большая вероятность, что он закодирован в ISO-8859-1, -15 (европейский вариант) или Windows-1252; если он старше, вероятными кандидатами являются CP-437 и CP-850. Файлы из восточноевропейских, российских или азиатских систем будут использовать разные наборы символов, о которых я мало что знаю. Затем есть EBCDIC... iconv -l выведет список всех наборов символов, о которых знает iconv, и оттуда вы сможете действовать методом проб и ошибок.

(В какой-то момент я знал большую часть CP-437 и ATASCII наизусть, это были дни.)

0
11.03.2018, 19:38
1 ответ

Проблема в том, что tp=(...определяет массив, но $tpссылается только на первый элемент массива.

Вам нужно

for i in "${tp[@]}" ; do
3
28.01.2020, 02:24

Теги

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