在 unix 上将文件类型转换为 utf-8 - iconv 失败

ped*_*ete 6 encoding

可能的重复项:
在 Windows 下批量转换用于编码或行尾的文件
如何使用 *nix 命令行工具将多个文件转换为 UTF-8 编码?

我的 Windows 机器上有一个 php 文件,在使用 winSCP 移动到 *nix 时,没有正确显示字符。

我已经将文件从 linux 机器拖回 windows 并使用 Notepad++ 检查编码,它说它是 ANSI。

所以我尝试了 iconv -f ANSI -t utf-8 filename.php>filename.php,但得到一个不支持 ANSI 转换的错误。我也试过 MS_ANSI,我没有得到错误,但我也没有得到显示正确编码的文件。

我用 winSCP 打开文件以查看它的外观,许多特殊字符显示为“?”。看到脚本的目的是从我的数据中删除这些特殊字符,这确实引起了一些问题。

是否有其他工具可以更改编码?我尝试了 yum iconv,但得到了无可用包的响应。

您将如何将此文件转换为正确的编码?

qua*_*ote 5

我在 WindowsXP(在 Cygwin 下)上创建的 MD5 散列也有类似的问题,保存到文件,然后复制到 Linux 系统,在其中计算散列以进行复制验证。如果被散列的文件名包含非 ASCII 字符,md5sum 会报告文件丢失,因为它没有正确解码文件名。但是,如果我在记事本中打开包含散列的文本文件并将编码从 ANSI 更改为 UTF-8,Linux md5sum 将获得正确的编码。

ANSI并不是真正合适的编码(对于 Microsoft 以外的任何人),因此 iconv 没有接受它。你可能会避开windows-1252,但不能保证它总是有效:

iconv -f windows-1252 -t utf-8 filename.from > filename.to
Run Code Online (Sandbox Code Playgroud)

作为记录,文件在其中一个 MD5 文本文件中给了我这个:

$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
Run Code Online (Sandbox Code Playgroud)


hlo*_*dal 1

您确定“ANSI”是 iconv 的正确字符编码/输入名称吗?您可以尝试运行“file filename.php”,通常文件会告诉(它认为的)编码是什么。您还可以尝试在进行转换时不指定from编码,或者您可以尝试所有这些:

for i in `iconv -l`; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done
Run Code Online (Sandbox Code Playgroud)