在 Linux 中从 EBCDIC 转换为 UTF8

Conversion from EBCDIC to UTF8 in Linux

我已经用 Perl 从我们的数据库 AS/400 DB2 中导入了一个 table。

问题是字符串是用 EBCDIC Latin-1(意大利语)编码的。

如何在 Linux bash 中将生成的文件转换为纯 utf-8?

开始于

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

然后检查输出,如果不完全正确,请检查 man iconviconv -l 列出的可用编码。

(请注意,"EBCDIC Latin-1" 有点奇怪。"Latin-1" 表示 ISO-8859-1,而 "EBCDIC" 则完全不同。尝试 file <filename> 获得受过教育由计算机猜测您实际查看的是什么编码。)

使用 iconv 很简单。

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

ISO8859-1 是 Latin-1 编码格式。有关编码列表,请参考 IBM 官方文档中的 table:https://www.ibm.com/support/knowledgecenter/ssw_aix_53/com.ibm.aix.nls/doc/nlsgdrf/iconv.htm%23d722e3a267mela

请注意,转换可能会留下来自 EBCDIC 的无效 UTF-8 字符。一个例子是字符串中的 NULL 字符。为避免这种情况,请使用十六进制编辑器并替换从 00 到 20 的十六进制值(space 字符)。

我运气好,下面一行:

iconv -f IBM037 -t utf-8 input_ebcdic.txt -o output.txt