将windows-1250转换为utf8时,请避免双重转换

时间:2012-10-05 08:49:41

标签: utf-8 iconv

  

可能重复:
  How do I convert files between encodings where only some of them are wrong?

我使用以下命令将.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服务器,我也安装了cygwin也许会有所帮助。

例如:这是在utf-8 Aşezaţi-vă中找到的文字。 这是iconv再次转换后的文字AĹźezaĹŁi-vÄ。

感谢名单

1 个答案:

答案 0 :(得分:2)

Windows-1250编码中的任何敏感文本都不会对utf-8有效。因为在utf-8中表示超出ASCII范围的字符的字节对应于windows-1250中没有意义的字符序列。因此,您需要先检查文件是否有效,如果不是,请进行转换。

如果无法进行转换,您可以使用iconv失败(错误级别为1)这一事实。因此,您首先运行iconv -f utf-8 -t utf-8,如果失败,请运行iconv -f windows-1250 -t utf-8

请注意,这仅用于决定某些内容是utf-8还是遗留编码,但您无法区分各种遗留编码,因为有效字符的范围相同或大部分都适用于所有窗口 - 任何编码,所以你必须做一些更高级的启发式,可能涉及拼写检查。