将 windows-1250 转换为 utf8 时避免双重转换 [重复]

问题描述 投票:0回答: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 然后转换它?我尝试了 flip、enca、encov、recode 但没有成功。

我使用 Windows 2003 Server,我也安装了 Cygwin,也许会有帮助。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.