<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Определение кодировки (1251 или 866)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=9940</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=9940&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Определение кодировки (1251 или 866)».]]></description>
		<lastBuildDate>Thu, 12 Feb 2015 14:03:53 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Определение кодировки (1251 или 866)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=91470#p91470</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (olmovc2)]]></author>
			<pubDate>Thu, 12 Feb 2015 14:03:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=91470#p91470</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Определение кодировки (1251 или 866)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86294#p86294</link>
			<description><![CDATA[<p>Благодарю!</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Thu, 04 Sep 2014 20:12:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86294#p86294</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Определение кодировки (1251 или 866)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=86197#p86197</link>
			<description><![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>]]></description>
			<author><![CDATA[null@example.com (yuriy2000)]]></author>
			<pubDate>Sun, 31 Aug 2014 17:41:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=86197#p86197</guid>
		</item>
	</channel>
</rss>
