可能重复:
在 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,但得到的是没有可用包的响应。
如何将此文件转换为正确的编码?
答案1
我在 WindowsXP(Cygwin 下)上创建 MD5 哈希时也遇到了类似的问题,这些哈希保存到文件中,然后复制到 Linux 系统,在 Linux 系统中计算哈希以进行副本验证。如果要哈希的文件的名称包含非 ASCII 字符,md5sum 会报告文件丢失,因为它无法正确解码文件名。但是,如果我在记事本中打开包含哈希的文本文件,并将编码从 ANSI 更改为 UTF-8,Linux md5sum 将获得正确的编码。
美国国家标准并不是一个真正的正确编码(对微软以外的任何人来说都是如此),所以这就是为什么 iconv 没有识别它。你可能会逃脱窗户-1252但不能保证它总是有效:
iconv -f windows-1252 -t utf-8 filename.from > filename.to
作为记录,文件在其中一个 MD5 文本文件中给出了以下内容:
$ file tequila.ansi.txt
tequila.ansi.txt: ISO-8859 text
答案2
在 Windows 中,有几种编码被称为“ANSI”。事实上,ANSI 用词不当.iconv 无法猜测您想要哪一个。
ANSI 编码是 Windows API 中的“A”函数使用的编码(“W”函数使用 UTF-16)。它对应的编码通常取决于您的 Windows 系统语言。最常见的是 CP 1252(也称为 Windows-1252)。因此,当您的编辑器说 ANSI 时,它的意思是“API 函数用作默认 ANSI 编码的任何内容”,这是系统中使用的默认非 Unicode 编码(因此通常是用于文本文件的编码)。
因此,要正确转换文件,您首先应该找出 Windows 系统的“ANSI”编码(或者直接让文本编辑器使用特定编码进行保存)。
答案3
您确定“ANSI”是 iconv 的正确字符编码/输入名称吗?您可以尝试运行“file filename.php”,通常文件会告诉(它认为的)编码是什么。您还可以尝试from
在进行转换时不指定编码,或者您可以尝试所有这些:
for i in `iconv -l`; do iconv -f $i -t utf-8 filename.php > filename.php.$i; done
答案4
您可以使用 Notepad++ 将其转换为 UTF-8。