Тема: VBS: Определение кодировки (1251 или 866)
Приветствую!
Ранее на форуме была тема про автоопределение кодировки UTF-8 или 1251
http://forum.script-coding.com/viewtopic.php?id=6801
Мне же нужно было определять 1251 или 866.
Вот написал такой вариант, может быть еще кому сгодится:
Function Guess_CP(byVal sStr)
Dim sVowel : sVowel = "[аеоиуяы]" 'гласные (часто встречающиеся)
Dim sNotVowel : sNotVowel = "[нтсрвлкмдпзбьчгй]{1,2}" 'согласные (часто встречающиеся)
With New RegExp
.Global = True
.Pattern = "[\s]+"
sStr = .Replace(sStr, " ") ' Убрать переносы строк и двойные пробелы
.Global = False
.IgnoreCase = True
.Pattern = sNotVowel & sVowel & sNotVowel & sVowel
if .Test (sStr) then
Guess_CP = "W" '1251
elseif .Test (dos2win(sStr)) then
Guess_CP = "D" ' 866
else
Guess_CP = "X" ' Не понятно
end if
end With
End Function
Логика простая пытаемся найти чередование популярных кириллических гласных и согласных через RegExp
Для "нормальных" текстов дает малый процент брака.