从两种不同的编码更改为 UTF-8

从两种不同的编码更改为 UTF-8
awk -F : '$1 ~ /[[:digit:]]+[[:alnum:]]*[[:digit:]]+/ && ($3>6200) {print $5" --- "$1" --- "$3;count++} END{print"\n----------\nSuma znalezionych rekordów:"count"\n----------\n"}' /etc/passwd|iconv -f ISO8859-2 -t UTF-8

所以我的问题是,当我在终端中运行上述代码时, iconv 命令将整个输入从 ISO8859-2 转换为 UTF-8 ,因此 - 波兰语变音符号未正确打印。

我通过添加更改了主要编码LANG=pl_us.UTF-8到 .bashrc,所以我想,出现问题是因为文件 /etc/passwd 是用 ISO8859-2 编码的,而打印的行是用 UTF-8 编码的。如何在不更改 .bashrc 的情况下解决这个问题?

答案1

不要转换混合的 UTF-8 和 ISO8859-2,而是将密码文件本身转换为 UTF-8,然后应用您的过程

iconv -f ISO8859-2 -t UTF-8 </etc/passwd |
    awk -F: '
        $1 ~ /[[:digit:]]+[[:alnum:]]*[[:digit:]]+/ && ($3>6200) { printf "%s --- %s --- %s\n", $5, $1, $3; count++ }
        END { printf "\n----------\nSuma znalezionych rekordów:%d\n----------\n", count }
    '

相关内容