如何将编码从非 ISO 扩展 ASCII 文本(带有 CRLF 行终止符)更改为 UTF-8?

Pat*_*ryk 31 character-encoding text

我有一个txt文件:

$ file -i x.txt
x.txt: text/plain; charset=unknown-8bit
$ file x.txt 
x.txt: Non-ISO extended-ASCII text, with CRLF line terminators
Run Code Online (Sandbox Code Playgroud)

还有一些字符编码不正确:

trwa³y, sta³y, usuwaæ
Run Code Online (Sandbox Code Playgroud)

如何将此文件的编码更改为 UTF-8 ?到目前为止,我已经尝试了以下方法:

$ iconv -f ASCII -t UTF-8 x.txt
                puiconv: illegal input sequence at position 4
Run Code Online (Sandbox Code Playgroud)

也许我应该以某种方式使用extended ASCII( high ASCII) 但在iconv的编码列表中找不到它。

Gil*_*il' 41

file 告诉您“非 ISO 扩展 ASCII 文本”,因为它检测到这是:

  • 除了换行符之外,最有可能是缺少控制字符(字节值 0-31)的“文本”文件;
  • “extended-ASCII”,因为有超出 ASCII 范围的字符(字节值 ?128);
  • “非 ISO”,因为有 128-159 范围内的字符(ISO 8859保留此范围用于控制字符)。

你必须弄清楚这个文件似乎是哪种编码。你可以试试Enca的自动识别。您可能需要通过以文本的语言告诉它来将其推向正确的方向。

enca x.txt
enca -L polish x.txt
Run Code Online (Sandbox Code Playgroud)

要转换文件,请传递-x选项:enca -L polish x.txt -x utf8 >x.utf8.txt

如果您不能或不想使用 Enca,您可以手动猜测编码。环顾四周告诉我这是波兰语文本,单词是 trwa?y, sta?y, usuwa?,所以我们正在寻找翻译在哪里³?æ?. 这看起来像latin-2latin-10或更可能(假设您正在查看为latin1 的“非 ISO” CP1250。要将文件转换为 UTF-8,您可以使用recodeiconv

recode CP1250..utf8 <x.txt >x.utf8.txt
iconv -f CP1250 -t UTF-8 <x.txt >x.utf8.txt
Run Code Online (Sandbox Code Playgroud)