Преобразование из EBCDIC в UTF8 в Linux

Я импортировал с помощью Perl таблицу из нашей базы данных AS/400 DB2.

Проблема в том, что строки закодированы в EBCDIC Latin-1 (итальянский язык).

Как я могу преобразовать полученный файл в обычный utf-8 в Linux bash?


person luca76    schedule 08.04.2016    source источник


Ответы (3)


Начните с

iconv -f EBCDIC-IT -t utf-8 <filename>

затем проверьте вывод, и если он не совсем правильный, проверьте man iconv и доступные кодировки, перечисленные iconv -l.

(Обратите внимание, что «EBCDIC Latin-1» несколько странный. «Latin-1» указывает на ISO-8859-1, а «EBCDIC» — это нечто совершенно другое. Попробуйте file <filename>, чтобы получить обоснованное предположение компьютера о том, какую кодировку вы используете. на самом деле смотрю)

person DevSolar    schedule 08.04.2016

Мне повезло со следующей строкой:

iconv -f IBM037 -t utf-8 input_ebcdic.txt -o output.txt
person JayBee    schedule 11.03.2020

С iconv это просто.

iconv -f ISO8859-1   -t "UTF-8" result.csv -o new_result.csv

ISO8859-1 — это формат кодирования Latin-1. Список кодировок см. в этой таблице из официальной документации IBM: https://www.ibm.com/support/knowledgecenter/ssw_aix_53/com.ibm.aix.nls/doc/nlsgdrf/iconv.htm%23d722e3a267mela

Обратите внимание, что преобразование может оставить недопустимые символы UTF-8 из EBCDIC. Примером являются символы NULL в строках. Чтобы этого избежать, используйте HEX-редактор и замените шестнадцатеричные значения от 00 до 20 (символ пробела).

person luca76    schedule 08.04.2016