<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Как определить кодировку?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7708</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7708&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Как определить кодировку?».]]></description>
		<lastBuildDate>Mon, 22 Oct 2012 04:18:42 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64956#p64956</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p><a href="http://forum.script-coding.com/viewtopic.php?pid=64315#p64315">Здесь</a> мы уже работали с сокетами, в данном случае можно тоже воспользоваться.<br />Из приложенного примера:<br />1) 16-ая строка закомментирована, т.е. скорее всего тупо забыта и будет присутствовать постоянно &quot;// // alert(&quot;Нехватает &quot;+(themeCost-money)+&quot; рейтинга&quot;);&quot;, там есть русские буквы, можно по ним проверить кодировку. Там много строк, которые кажутся постоянными.<br />2) Строка 27- &quot;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;&quot;.<br /></p><div class="quotebox"><blockquote><p>Как можно заметить, первый байт есть ни что иное, как русские символы &quot;Р&quot; и &quot;С&quot;. Так что на них ориентироваться нельзя, можно попробовать отслеживать &quot;кроказябры&quot;, идущие после Наших &quot;Р&quot; и &quot;С&quot; (коды их 208 и 209 DEC).</p></blockquote></div><p>Нужно искать константы, которые занимают несколько байт в юникоде или исследовать частоты. Если в строке на русском языке много крокозябр(неалфавитных символов) или слишком много букв &quot;С&quot; и &quot;Р&quot;(гласные &quot;о&quot;, &quot;а&quot;, &quot;е&quot;, &quot;и&quot; и согласные &quot;н&quot;, &quot;т&quot; встречаются чаще чем любая из них).</p></blockquote></div><p>Благодарю за помощь. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Resager)]]></author>
			<pubDate>Mon, 22 Oct 2012 04:18:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64956#p64956</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64861#p64861</link>
			<description><![CDATA[<p><a href="http://forum.script-coding.com/viewtopic.php?pid=64315#p64315">Здесь</a> мы уже работали с сокетами, в данном случае можно тоже воспользоваться.<br />Из приложенного примера:<br />1) 16-ая строка закомментирована, т.е. скорее всего тупо забыта и будет присутствовать постоянно &quot;// // alert(&quot;Нехватает &quot;+(themeCost-money)+&quot; рейтинга&quot;);&quot;, там есть русские буквы, можно по ним проверить кодировку. Там много строк, которые кажутся постоянными.<br />2) Строка 27- &quot;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;&quot;.<br /></p><div class="quotebox"><blockquote><p>Как можно заметить, первый байт есть ни что иное, как русские символы &quot;Р&quot; и &quot;С&quot;. Так что на них ориентироваться нельзя, можно попробовать отслеживать &quot;кроказябры&quot;, идущие после Наших &quot;Р&quot; и &quot;С&quot; (коды их 208 и 209 DEC).</p></blockquote></div><p>Нужно искать константы, которые занимают несколько байт в юникоде или исследовать частоты. Если в строке на русском языке много крокозябр(неалфавитных символов) или слишком много букв &quot;С&quot; и &quot;Р&quot;(гласные &quot;о&quot;, &quot;а&quot;, &quot;е&quot;, &quot;и&quot; и согласные &quot;н&quot;, &quot;т&quot; встречаются чаще чем любая из них).</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Fri, 19 Oct 2012 10:38:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64861#p64861</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64859#p64859</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><div class="quotebox"><cite>Resager пишет:</cite><blockquote><p>Скачиваю файл с HTTP...</p></blockquote></div><p>Кстати говоря, там в поле &quot;Content-Type&quot; заголовка кодировка не указана?</p></blockquote></div><p>Указана, <strong>text/html; charset=UTF-8</strong> но как это глянуть то? Скачиваю я через <strong>UrlDownloadToFile</strong></p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>я этого не писал</p></blockquote></div><p>Рабочий день заканчивался, меня с работы выгоняли. Торопился <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><br /><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Есть возможно прикрепить к сообщению пример тестируемого файла? А лучше несколько примеров</p></blockquote></div><p>Прикрепил.</p><p>Нашел вот такую информацию в википедии:<br /></p><div class="quotebox"><blockquote><p>Текст, состоящий только из символов Юникода с номерами меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (реально только до 4 байт, поскольку использование кодов больше 221 не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx.<br />Проще говоря, в формате UTF-8 символы латинского алфавита, знаки препинания и управляющие символы ASCII записываются кодами US-ASCII, a все остальные символы кодируются при помощи нескольких байтов со старшим битом 1. Это приводит к двум эффектам.</p></blockquote></div><p>Значит, вероятно можно запускать проверку старших битов каждого байта/кода символа. (что однако проблематично, с точки зрения быстродействия). Можно однако после первого найденого такого символа сразу конвертировать файл.<br />К примеру, символ скобки, закодированный как 0x3C (&quot;&lt;&quot;) в двоичной выглядит так: 00111100<br />А символ (кирилица) (&quot;О&quot;)/UTF-8 или (&quot;Рћ&quot;)/ASCII с кодом 0xD0 &amp; 0x9E имеет двоичный код такой 11010000 &amp; 10011110<br />А символ (кирилица) (&quot;с&quot;)/UTF-8 или (&quot;СЃ&quot;)/ASCII с кодом 0xD1 &amp; 0x81 имеет двоичный код такой 11010001 &amp; 10000001<br />Как можно заметить, первый байт есть ни что иное, как русские символы &quot;Р&quot; и &quot;С&quot;. Так что на них ориентироваться нельзя, можно попробовать отслеживать &quot;кроказябры&quot;, идущие после Наших &quot;Р&quot; и &quot;С&quot; (коды их 208 и 209 DEC).<br />...<br />Все же необходимо знать кодировку.<br />Узнать Http заголовок можно с помощью функции, <strong><a href="http://www.autohotkey.com/community/viewtopic.php?t=10510">ОТСЮДА</a></strong><br />Ну Регулярное выражение что бы достать кодировку, можно задать как-то так: </p><div class="codebox"><pre><code>Content-Type\:(?!charset).*?charset=(.*?)$</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Resager)]]></author>
			<pubDate>Fri, 19 Oct 2012 02:11:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64859#p64859</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64858#p64858</link>
			<description><![CDATA[<div class="quotebox"><cite>Resager пишет:</cite><blockquote><p>Скачиваю файл с HTTP...</p></blockquote></div><p>Кстати говоря, там в поле &quot;Content-Type&quot; заголовка кодировка не указана?</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Thu, 18 Oct 2012 17:56:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64858#p64858</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64854#p64854</link>
			<description><![CDATA[<div class="quotebox"><cite>Resager пишет:</cite><blockquote><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Написал небольшой скрипт (впрочеим он не находит нужного)</p></blockquote></div></blockquote></div><p>я этого не писал <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> .<br /></p><div class="quotebox"><cite>Resager пишет:</cite><blockquote><p>Как видим, БОМ нет <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> Как определить такой файл и не знаю (поторопился, скзав что нет пробем)</p></blockquote></div><p>Есть возможно прикрепить к сообщению пример тестируемого файла? А лучше несколько примеров <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> .</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Thu, 18 Oct 2012 11:13:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64854#p64854</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64853#p64853</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Написал небольшой скрипт (впрочеим он не находит нужного)</p></blockquote></div><div class="codebox"><pre><code>#Include consolesender.ahk 

testUTFSignatyre(teststring)
{
    flagIsPreUTF := 0
    flagIsUTF := 0    
    Loop, parse, teststring
    {
        Transform, CharCode, Asc, %A_LoopField%
        console(CharCode . A_Tab . A_LoopField)
        if (CharCode=239)
        {
            flagIsPreUTF := 0
            ;msgbox, %A_LoopField%
        }
        if (flagIsPreUTF=1)
            if (CharCode=187)
                flagIsPreUTF := 1
        if (flagIsPreUTF=2)
            if (CharCode=191)
                flagIsUTF := 1
        if (flagIsUTF=1)
            return 1
    }
    return 0
}
filename := &quot;catpage.html&quot;
    console(&quot;====Читаем файл&quot;)
    FileRead, file, % filename
    console(&quot;=====Проверяем кодировку на UTF-8&quot;)
    rezulcode := testUTFSignatyre(file)
    if(rezulcode=1)
        console(&quot;UTF-8&quot;)
    else
        console(&quot;CP1251&quot;)
    msgbox, %rezulcode%</code></pre></div><p>На строку: </p><div class="quotebox"><blockquote><p>&lt;title&gt;Основные темы для контакта -&nbsp; это оформления,&nbsp; которым не нашлось место в других категориях&lt;/title&gt;</p></blockquote></div><p>Начал выводить это (моя консолька, корявая выводит так)<br /></p><div class="quotebox"><blockquote><p>[17:53:51:437] ====Читаем файл<br />[17:53:51:921] =====Проверяем кодировку на UTF-8<br />[17:53:52:359] 60	&lt;<br />[17:53:53:093] 116	t<br />[17:53:53:562] 105	i<br />[17:53:54:156] 116	t<br />[17:53:54:625] 108	l<br />[17:53:55:093] 101	e<br />[17:53:55:640] 62	&gt;<br />[17:53:56:156] 208	Р<br />[17:53:56:625] 158	ћ<br />[17:53:57:125] 209	С<br />[17:53:57:593] 129	Ѓ<br />[17:53:58:078] 208	Р<br />[17:53:58:515] 189	Ѕ<br />[17:53:59:093] 208	Р<br />[17:53:59:578] 190	ѕ<br />[17:54:00:062] 208	Р<br />[17:54:00:484] 178	І<br />[17:54:01:031] 208	Р<br />[17:54:01:546] 189	Ѕ<br />[17:54:02:062] 209	С<br />[17:54:02:484] 139	‹<br />[17:54:02:937] 208	Р<br />[17:54:03:406] 181	µ</p></blockquote></div><p>Как видим, БОМ нет <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /> Как определить такой файл и не знаю (поторопился, скзав что нет пробем)</p>]]></description>
			<author><![CDATA[null@example.com (Resager)]]></author>
			<pubDate>Thu, 18 Oct 2012 10:58:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64853#p64853</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64852#p64852</link>
			<description><![CDATA[<div class="quotebox"><cite>Resager пишет:</cite><blockquote><p>Файл этот UTF-8 без BOM. Даже <strong>Filec.Encoding</strong> возвращает CP1251. Однако при чтении, как только дело до русских букв доходит, то появляются кракозябры.</p></blockquote></div><p>Это плохо, тогда только по косвенным признакам. Можно проверить файл на неиспользуемые UTF-8 байты, но на этот тест я бы полагаться не стал. Надёжнее будет частотный анализ, исходя из предполагаемого содержимого файла(русско-английский текст, xml-файл, tex-документ и т.д.) можно оценить вероятность каждой из кодировок. Правда это не самый быстрый путь, но универсальный.<br /></p><div class="quotebox"><cite>Resager пишет:</cite><blockquote><p>Хм... так. Зато можно встретить эту сигнатуру посередине файла.</p></blockquote></div><p>Может там несколько файлов, склеенных в один или перед файлом идёт какой-то пролог?</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Thu, 18 Oct 2012 10:12:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64852#p64852</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64851#p64851</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>У UTF-8 есть специальная сигнатура(<a href="http://ru.wikipedia.org/wiki/Byte_order_mark">BOM</a>)- 0xEF-0xBB-0xBF.</p></blockquote></div><p>Файл этот UTF-8 без BOM. Даже <strong>Filec.Encoding</strong> возвращает CP1251. Однако при чтении, как только дело до русских букв доходит, то появляются кракозябры.</p><p>Хм... так. Зато можно встретить эту сигнатуру посередине файла. Теперь проблема с кодировкой решена.</p>]]></description>
			<author><![CDATA[null@example.com (Resager)]]></author>
			<pubDate>Thu, 18 Oct 2012 09:46:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64851#p64851</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64850#p64850</link>
			<description><![CDATA[<p>У UTF-8 есть специальная сигнатура(<a href="http://ru.wikipedia.org/wiki/Byte_order_mark">BOM</a>)- 0xEF-0xBB-0xBF.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Thu, 18 Oct 2012 09:25:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64850#p64850</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Как определить кодировку?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=64849#p64849</link>
			<description><![CDATA[<p>Скачиваю файл с HTTP, не знаю почему, но время от времени кодировка файла меняется (ссылка на файл одна и та же, кодировка то CP1251, то UTF-8). Собственно возникла проблема, как определить кодировку файла?<br />Такие методы не помогают:<br /></p><div class="codebox"><pre><code>FileEncoding, UTF-8
FileRead, VAR, ...</code></pre></div><p>потому как если файл в CP1251, то при попытке открыть его как UTF-8 и потом ещё и сохранить в cp1251, символы русские просто пропускаются.</p>]]></description>
			<author><![CDATA[null@example.com (Resager)]]></author>
			<pubDate>Thu, 18 Oct 2012 09:20:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=64849#p64849</guid>
		</item>
	</channel>
</rss>
