Bash

iconv 無法從 ASCII 轉換.. 為什麼?

  • April 21, 2022

我有這個文件。

如果我在 Total Commander 中打開它F3並按下S正確的內容將顯示。

我試圖在 bash 中做同樣的事情iconv

iconv -f ASCII -t UTF8 input.txt

但我得到了這個:

iconv: illegal input sequence at position 0

如果我從CP850or開始CP852

iconv -f CP850 -t UTF8 input.txt

iconv -f CP852 -t UTF8 input.txt

我將在輸出中包含一些不需要的字元:

̦ŮŢŮ

如何在 Linux 終端中也有請求的內容?Total Commander 顯示時使用了什麼編碼ASCII (DOS-charset)?或者它是一個錯誤iconv

它不是 ASCII,因此您無法將文件從 ASCII 轉換為其他任何內容。經過一番調查,編碼CP437似乎給出了“好的”視覺表示。以供將來參考,這是我確定這一點的方式。

# Workspace
mkdir picture
cd picture

# Get the file
curl http://tiborzsitva.szm.com/ascii/input.txt >x
file x
x: ISO-8859 text, with CRLF line terminators

# Try and convert with every possible conversion
for e in $(iconv -l | awk '{print $1}')
do
   iconv -f "$e" -t utf8 <x >"x.$e" 2>"x.$e.error"
done

# Delete the failed conversion attempts (those with error reports)
for f in x.*
do
   [ -s "$f.error" ] && rm -f "$f"
   rm -f "$f.error"
done

# Link identical files together
for f in x.*
do
   c=$(cksum <"$f")
   cf="x.cksum.${c// /_}"
   [ -f "$cf" ] && ln -f "$cf" "$f" || ln -f "$f" "$cf"
done
rm -f x.cksum.*

# See what each one looks like
ls -l x.*
less x.*

# The first one (437) looks good so look for a nice encoding name
iconv -l | grep -w 437
437 CP437 IBM437 CSPC8CODEPAGE437

我建議這樣CP437做會很好

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