Я импортировал с помощью Perl таблицу из нашей базы данных AS/400 DB2.
Проблема в том, что строки закодированы в EBCDIC Latin-1 (итальянский язык).
Как я могу преобразовать полученный файл в обычный utf-8 в Linux bash?
Я импортировал с помощью Perl таблицу из нашей базы данных AS/400 DB2.
Проблема в том, что строки закодированы в EBCDIC Latin-1 (итальянский язык).
Как я могу преобразовать полученный файл в обычный utf-8 в Linux bash?
Начните с
iconv -f EBCDIC-IT -t utf-8 <filename>
затем проверьте вывод, и если он не совсем правильный, проверьте man iconv
и доступные кодировки, перечисленные iconv -l
.
(Обратите внимание, что «EBCDIC Latin-1» несколько странный. «Latin-1» указывает на ISO-8859-1, а «EBCDIC» — это нечто совершенно другое. Попробуйте file <filename>
, чтобы получить обоснованное предположение компьютера о том, какую кодировку вы используете. на самом деле смотрю)
Мне повезло со следующей строкой:
iconv -f IBM037 -t utf-8 input_ebcdic.txt -o output.txt
С 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 (символ пробела).