1

可能重复:
如何在只有部分错误的编码之间转换文件?

我使用以下命令将文件夹中的 .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然后转换它?我尝试了翻转,enca,encov,重新编码但没有成功。

我使用的是 Windows 2003 服务器,我也安装了 cygwin,也许这会有所帮助。

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

谢谢

4

1 回答 1

2

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-any 编码,有效字符的范围是相同或大部分相同,所以你d 必须做一些更高级的启发式方法,可能涉及拼写检查。

于 2012-10-05T08:57:58.610 回答