iconv 无法从 ASCII 转换..为什么?

iconv 无法从 ASCII 转换..为什么?

我有这个文件。

如果我在 Total Commander 中打开它F3并按下,S将显示正确的内容。

我尝试在 bash 中做同样的事情iconv

iconv -f ASCII -t UTF8 input.txt

但我得到了这个:

iconv: illegal input sequence at position 0

如果我从CP850或做CP852

iconv -f CP850 -t UTF8 input.txt

iconv -f CP852 -t UTF8 input.txt

我将在输出中包含一些不需要的字符:

̦ŮŢŮ

如何在 Linux 终端中也获得请求的内容? Total Commander 显示时使用什么编码ASCII (DOS-charset)?或者它是一个错误iconv

答案1

它不是 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做会很好

答案2

ASCII 是一种 7 位编码,并且您的文件以一堆字节(0xdb一个 8 位值)开头。

如果它(部分)是图形化的,那么它可能是8 位 DOS 代码页之一。我尝试了 CP850 和 CP437,后者似乎给出了合理的图像。

有道理,因为CP437 是原始 IBM PC 代码页CP850 Latin-1 之一。前者有更多的绘图字符,如组合的单双线和垂直对半的方框,这两者在CP850中都被一些重音字母取代。

$ $ iconv -f cp437 -t utf8 < input.txt | head -10
█████████████████████████████████▀▀▀▀▀▀▀▀██▀▀▀▀▀▀▀▀████████████████████████████
██████████████████████▀▀▀▀ ▄▄▄▄  ▄█▓▓▓▓█▌  ▄█▓▓▓▓█▄▄ ▀█████████████████████████
███████████████▀▀ ▄▄▄▄▄▓█▓▓▓▒▒▐▌▐▓▓▒▒▒▒▓█▌▐█▓▒▒▒▒▒▒▀█  ▄▄▄▄ ▀██████████████████
██████▀▀▀▀▀▀ ▄▄▄▀█▓██▓█▓▒▒▒▒░░░█ █▒░░░░▒▌░▓█▄░░░░░░▄█ █▓▒▒▀█▄ ▀▀▀██████████████
██▀ ▄▄▄▓▒▄ █▓▓██▌▐▒█▓▒██░░░░░░▄█░▀█▄▄▄▄▀░ ░ ▀▀██▒▓▓█▌▐▌▒▒░░▓█▌▐█▄▄▄▄▄ ▀▀███████
██ ███████ █▒▒▓▀▄▐░▓▒░█▀▄▄▄▀▀▀▀                ▀▀▀▀▀ ▐▓▓▓▒░▓█ █▓▒░░░▒▒▓▄ ▀█████
██ ▓▓▓████▌▐░░▄▀▄ ▄▄▀▀                   ░░  ░░░░     ▀▀▀█▒█ ▐█▄░░░░░░▒▓█ ▄▄ ██
██ ▒▒▒▓████ ▓▄▀▀ ▀   ░   ░ ░░█▓▄▌  ▄░░ ░░██░░████░░  ░         ▀▀██▄▄▒▓█▌▐█▀ ██
██ ░░░▒▓█▀          ░▒░  ░░░▒▓▒▓█ ▐▓▒░░▒▒▓█░░▓▓█▓░░█▓█▓ ▐▓░        ▀▀▀█▓ ██░ ██
██ ▄▄▀▀    ▄▄▄█▓░  ░▒▓░ ░▒▓▒▓▒░▒▓ ▓▒▓▒░▓▓▒▓▒▒▒▒▓▒▒▒▓▒▓▒▌ ▀▄▄█▓███         ▀█ 

(好吧,在 SE 上看起来似乎不太好,但你明白了。)

相关内容