<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; HTA: пакетная перекодировка файлов (Recode v1.0)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3522&amp;type=atom" />
	<updated>2009-08-12T19:14:25Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=3522</id>
		<entry>
			<title type="html"><![CDATA[HTA: пакетная перекодировка файлов (Recode v1.0)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=27070#p27070" />
			<content type="html"><![CDATA[<p>Тут на днях пришлось написать небольшую утилитку, <br />конвертирующую файлы из одной кодировки в другую.</p><p>Изначально нужно было для web-разработки (CMS&#039;ка тут одна мимо проходила)...<br />Потом пригодилось и для тестирования новых функций одного клавиатурного тренажера...</p><p>Первоначально было просто JS скриптом, в коде задавался &quot;файл из&quot; и &quot;файл в&quot;, <br />выполнялся, само собой, WScript&#039;ом.</p><p>Для личного удобства прикрутил простейший самопальный GUI.</p><p>Исходный код открыт для модификации, юзайте на здоровье, никаких лицензий и ограничений<br />(ну, на всякий случай опубликован на сайте проекта под GPL v3)...</p><p>Т.к. никакого описания не предполагалось -- делал для себя,<br />ну и для тех, &quot;кто в танке&quot; расскажу, пожалуй, немного -- об устройстве:</p><p>При загрузке производится чтение текущей директории (диск &quot;C:&quot;, т.к. есть у всех, наверное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> )<br />Диск можно изменить в левом верхнем углу, поле &quot;Disk&quot;.<br />Переход по директориям нажатием на директорию (там курсорчик меняется со стрелочки на руку).<br />Для того, чтобы изменить маску (по умолчанию &quot;txt&quot;) измените в соответствующем текстовом поле<br />&quot;Mask&quot; вверху, рядом с &quot;Disc&quot;.</p><p>Маска сравнивается с концом имени файла, так что это работает именно как расширение.<br />Не проверял, но, по идее можно, например, выбрать файлы, заканчивающиеся,<br />на нечто вроде &quot;something.htm&quot;.<br />К сожалению стандартную всем понятную &quot;*&quot; не &quot;прикручивал&quot;, нужно будет -- <br />отключите фильтр по маске, покажет все файлы, или допишите код<br />(насколько я понимаю достаточно будет одного IF&#039;a).</p><p>Для того, чтобы произвести перекодирование нужно нажать кнопку &quot;Recode&quot;.<br />Перед этим, конечно же, желательно &quot;создать пакет&quot;. <br />Для &quot;создания пакета&quot; просто щелкните рядом с директорией или файлом, там есть<br />такой квадрат с горизонтальной черточкой. Вот на него и щелкайте, черточка<br />сменится на букву V, соответственно данная директория или файл &quot;как бы&quot; <br />добавятся в пакет.</p><p>Опять же, к сожалению, перейти внутрь одной директории, добавить нечто, а потом<br />перейти внутрь другой и тоже нечто добавить -- нельзя.<br />Зато работает рекурсивное перекодирование во вложеных директориях<br />(флажок &quot; Include sub folders ! &quot;, по умолчанию взведён).</p><p>После нажатия &quot;Recode&quot; будет сформирован &quot;пакет&quot;, он выведется в то же поле, <br />которое до этого отображало список директорий и файлов.<br />Это такой &quot;контроль, всё ли правильно&quot;.<br />Вместе с этим в центре вверху появятся еще две кнопки:<br />&quot;Recode?&quot; -- красная такая.<br />И &quot;No&quot; -- обычная.<br />Первая начнёт перекодировку, вторая, соответственно, всё отменит.<br />Настоятельно рекомендую перед нажатием &quot;красной кнопки&quot;: пробежитесь взглядом<br /> по сформированному пакету глазами, вдруг чего не так...</p><p>Внимание!!!: за один раз производится перекодировка только из одного формата в другой.<br />Утилита не умеет определять кодировку самостоятельно!!!<br />Так что шансы &quot;все поломать&quot; очень и очень немаленькие...<br />Если у Вас в директориях (особенно во вложеных) файлы разных кодировок -- не поленитесь,<br />рассортируйте, а потом пользуйтесь утилитой...</p><p>Собственно, кодировки...<br />Это поля &quot;From&quot; и &quot;To&quot;.</p><p>&quot;From&quot; это: UTF-8, Win 1251 и KOI-8r<br />&quot;To&quot; это то же самое, но еще есть UTF-8 без подписи BOM (Byte Order Mark).<br />Для UTF-8 отметка BOM это три байта в начале файла.<br />Вот их то и не будет.<br />Для чего это нужно -- ну, некоторые web-системы иногда &quot;некузяво&quot; работают с файлами,<br />в которых есть отметка BOM. Правда без этой отметки файлы плохо распознаются<br />текстовыми редакторами (кодировка определяется неверно, и вместо символов -- кракозяблы).<br />К сожалению для убирания этой отметки перекодирование происходит как бы в 2 стадии,<br />сначала в текстовом режиме файл конвертируется в UTF с отметкой, потом в бинарном<br />вырезаются первые 2 байта. Это, конечно, тормозно... но я делал быстро, а не качественно, <br />так что -- прошу меня извинить, идея реализована, работоспособна, остальное -- дело техники.</p><p>Наконец, если Вам нужны еще кодировки, то, не поленитесь, откройте исходник на 60-й<br />строке, и прочтите путь в реестре, где их можно посмотреть.<br />Имена разделов реестра (как бы папочек), это и есть имена кодировок.<br />Можно использовать и алиасы, они находятся внутри разделов, называются AliasForCharset.</p><p>Используется следующим образом:<br />там на 70 и на 76 строке есть, соответственно, два тэга &lt;SELECT&gt;&#039;ов.<br />Достаточно просто добавить в еще один &lt;OPTION&gt; с нужным &quot;VALUE=&quot;.<br />&quot;VALUE&quot; это как раз то, что вы подсмотрите в реестре...<br />Это ВСЁ...<br />Никаких дополнительных модификаций для использования нужной Вам кодировки &quot;нэ трэбо&quot;.</p><p>Остается только добавить, что там (в реестре) уже есть &quot;почти все известные науке кодировки&quot;,<br />так что мне лень было их выписывать, мне нужно было просто решить локальную задачку...</p><br /><p>Работает через ADO, так что нужен MDAC, но он обычно идет в самой Windows.<br />Работает быстро и стабильно: тестировал на своём ноуте (AMD Turion 64x2 Mobile, 2Gb, 5400 об./мин.),<br />файлик размером в 65Mb (&quot;с копейками&quot;) конвертится в UTF без BOM (т.е. 2 перезаписи) <br />меньше чем за 10 секунд (у меня XP Pro, если что...).<br />Работа с мелкими файлами во вложенных директориях тоже достаточно шустра <br />и нареканий у меня не вызвала.</p><br /><p>Внимание! На утилиту ругается касперский... матом... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />На предмет ошибок не тестировал, по идее там не в чем ошибаться, но всё же...</p><p>За сим кратким вступлением разрешите откланяться, искренне ваш went ...</p><br /><p>Сайт утилиты:<br /><a href="http://code.google.com/p/kbtrainer/">http://code.google.com/p/kbtrainer/</a><br />там в правой стороне есть раздел &quot;Featured downloads:&quot;, вот там оно и лежит...<br />Так что лицензия GPL v3 совершенно распространяется и на этот продукт.</p><p>В общем если Вам нужно в Proprietal Use -- просто поменяйте код сохранив функционал <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />На самом деле это сайт клавиатурного тренажера,<br />о нем уже есть тема: <a href="http://forum.script-coding.com/viewtopic.php?id=2451">http://forum.script-coding.com/viewtopic.php?id=2451</a></p>]]></content>
			<author>
				<name><![CDATA[went.out]]></name>
			</author>
			<updated>2009-08-12T19:14:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=27070#p27070</id>
		</entry>
</feed>
