Utf 8 将windows-1250转换为utf8时避免双重转换

Utf 8 将windows-1250转换为utf8时避免双重转换,utf-8,iconv,Utf 8,Iconv,可能重复: 我使用以下命令从文件夹中将.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 for/f“delims=“%%a IN('dir C:\utf\u check\*.srt/b/s')do%iconv%-s-f windows-1250-t

可能重复:

我使用以下命令从文件夹中将.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
for/f“delims=“%%a IN('dir C:\utf\u 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,但没有成功

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

例:这是utf-8Aşezaţi-vţ中的文本。 这是iconv再次转换AĹźezaĹi-vÄ后的文本


thanx

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

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


请注意,这只适用于确定是utf-8还是传统编码,但您无法区分不同的传统编码,因为有效字符的范围对于所有windows anything编码都是相同的或基本相同的,因此您必须执行一些更高级的启发式,可能涉及拼写检查。

ASCII是UTF-8的子集!(windows-1250当然不是)我已经理解了,ASCII是notepad++关于编码的说法