<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBS: Определение кодировки (1251 или 866)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9940&amp;type=atom" />
	<updated>2015-02-12T14:03:53Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=9940</id>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Определение кодировки (1251 или 866)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=91470#p91470" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>// функция перекодировки
var Recode={
    dos:&quot;Ђ ЃЎ‚ўѓЈ„¤…Ґрс†¦‡§€Ё‰©ЉЄ‹«Њ¬ЌЋ®ЏЇђа‘б’в“г”д•е–ж—зи™йњм›лљкќнћоџпфхтуцчьшщ&quot;,
    win:&quot;АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЫыЪъЭэЮюЯяЇїЄєІі№°•&quot;,
    dos2win:function(s){var out=&quot;&quot;;for(var i=0;i&lt;s.length;i++){var ch=s.charAt(i);var n=this.dos.indexOf(ch);if(n&gt;=0){ch=this.win.charAt(n)};out+=ch;};return out;},
    win2dos:function(s){var out=&quot;&quot;;for(var i=0;i&lt;s.length;i++){var ch=s.charAt(i);var n=this.win.indexOf(ch);if(n&gt;=0){ch=this.dos.charAt(n)};out+=ch;};return out;}
}

// функция автоматического определения кодировки текста - WIN или DOS
function DetectCodePage(Text){
    var Text=Text||&#039;&#039;;var tmpTextWin=&#039;&#039;;var tmpTextDos=&#039;&#039;;
    // регулярные выражения для наборов символов WIN и DOS кодировок
    var RegExpToWin=new RegExp(&#039;[&#039;+Recode.win+&#039;]+&#039;,&#039;g&#039;);var RegExpToDos=new RegExp(&#039;[&#039;+Recode.dos+&#039;]+&#039;,&#039;g&#039;);
    // находим и удаляем символы соответствующие разным кодировкам
    tmpTextWin=Text.replace(RegExpToWin,&#039;&#039;);tmpTextDos=Text.replace(RegExpToDos,&#039;&#039;);
    // определяем для какой кодировки было найдено больше символов
    if(tmpTextWin.length&lt;tmpTextDos.length){
        //WScript.Echo(&quot;WIN&quot;);
        return &quot;win&quot;;
    }
    else{
    //WScript.Echo(&quot;DOS&quot;);
    return &quot;dos&quot;;
    }
}

</code></pre></div>]]></content>
			<author>
				<name><![CDATA[olmovc2]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32874</uri>
			</author>
			<updated>2015-02-12T14:03:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=91470#p91470</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBS: Определение кодировки (1251 или 866)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86294#p86294" />
			<content type="html"><![CDATA[<p>Благодарю!</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2014-09-04T20:12:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86294#p86294</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBS: Определение кодировки (1251 или 866)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=86197#p86197" />
			<content type="html"><![CDATA[<p>Приветствую! </p><p>Ранее на форуме была тема про автоопределение кодировки UTF-8 или 1251<br /><a href="http://forum.script-coding.com/viewtopic.php?id=6801">http://forum.script-coding.com/viewtopic.php?id=6801</a> </p><p>Мне же нужно было определять 1251 или 866. <br />Вот написал такой вариант, может быть еще кому сгодится:</p><div class="codebox"><pre><code>Function Guess_CP(byVal sStr)
   Dim sVowel : sVowel = &quot;[аеоиуяы]&quot; &#039;гласные (часто встречающиеся)
   Dim sNotVowel : sNotVowel = &quot;[нтсрвлкмдпзбьчгй]{1,2}&quot; &#039;согласные (часто встречающиеся)
   With New RegExp 
      .Global = True              
      .Pattern = &quot;[\s]+&quot;            
       sStr = .Replace(sStr, &quot; &quot;)   &#039; Убрать переносы строк и двойные пробелы

      .Global = False 
      .IgnoreCase = True 
      .Pattern =  sNotVowel &amp; sVowel &amp; sNotVowel &amp; sVowel  

      if .Test (sStr)  then 
          Guess_CP = &quot;W&quot;  &#039;1251
      elseif .Test (dos2win(sStr))  then 
          Guess_CP = &quot;D&quot; &#039; 866
      else
          Guess_CP = &quot;X&quot; &#039; Не понятно
      end if

   end With

End Function
</code></pre></div><p>Логика простая пытаемся найти чередование популярных кириллических гласных и согласных через RegExp <br />Для &quot;нормальных&quot; текстов дает малый процент брака.</p>]]></content>
			<author>
				<name><![CDATA[yuriy2000]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25753</uri>
			</author>
			<updated>2014-08-31T17:41:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=86197#p86197</id>
		</entry>
</feed>
