Character-Encoding

從兩種不同的編碼更改為 UTF-8

  • March 28, 2020
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 的情況下解決這個問題?

不要轉換混合的 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 }
   '

引用自:https://unix.stackexchange.com/questions/575500