可能重复:
如何在只有部分错误的编码之间转换文件?
我使用以下命令将文件夹中的 .srt 文件从 windows-1250 转换为 utf-8
for /f "delims=" %%a IN (' dir C:\utf_check\*.srt /b /s ') do %iconv% -s -f windows-1250 -t utf-8 < %%a > %%a.txt
我对此有疑问,如果文件已经是 utf-8,iconv 会破坏文件并插入奇怪的字符。有没有办法先检测是 utf-8 还是 ascii 然后转换它?我尝试了 flip、enca、encov、recode 但没有成功。
我使用 Windows 2003 Server,我也安装了 Cygwin,也许会有帮助。
示例:这是在 utf-8 Aşezaţi-vă. 中找到的文本 这是 iconv 再次转换后的文本AĹźezaĹŁi-vÄ.
windows-1250 编码中的任何敏感文本都不会是有效的 utf-8。因为表示 utf-8 中超出 ASCII 范围的字符的字节对应于 windows-1250 中没有意义的字符序列。所以你需要先检查文件是否是有效的 utf-8,只有如果不是,才进行转换。
您可以使用这个事实,如果 iconv 无法进行转换,它就会失败(错误级别为 1)。所以你首先运行
iconv -f utf-8 -t utf-8
,如果失败,运行iconv -f windows-1250 -t utf-8
。
请注意,这仅适用于确定某些内容是 utf-8 还是传统编码,但您无法区分各种传统编码,因为对于所有 windows-anything 编码,有效字符的范围是相同的或大部分是相同的,所以你必须做一些更高级的启发式方法,可能涉及拼写检查程序。