<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: Определить юникодность имени файла - как?]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8783</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8783&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: Определить юникодность имени файла - как?».]]></description>
		<lastBuildDate>Thu, 07 Nov 2013 07:05:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77022#p77022</link>
			<description><![CDATA[<p>Всё-таки Asc рулит. Видимо, использует тот же механизм замены символов, что и сама винда. А проверять коды не надо. Пусть этим винда и занимается, если такая умная:</p><div class="codebox"><pre><code>// проверка имён файлов/папок на «неюникодность» (допустимость для старых программ)
// предполагается, что файлы и папки с тестовыми именами лежат в папке скрипта
var
 a=[],
 c=new ActiveXObject(&#039;MSScriptControl.ScriptControl&#039;),
 f=new ActiveXObject(&#039;Scripting.FileSystemObject&#039;),
 n=f.getFolder(f.getParentFolderName(WScript.scriptFullName));

c.language=&#039;VBScript&#039;;
c.allowUI=false;
c.addCode(
&#039;Function FB(E)\n&#039;+
&#039;  FB = &quot;&quot;\n&#039;+
&#039;  For i = 1 to Len(E)\n&#039;+
&#039;    FB = FB &amp; Chr(Asc(mid(E,i,1)))\n&#039;+
&#039;  Next\n&#039;+
&#039;End Function\n&#039;
);

with(new Enumerator(n.subFolders))for(;!atEnd();moveNext())a.push(item().name);
with(new Enumerator(n.files))for(;!atEnd();moveNext())a.push(item().name);

for(var i=0;i&lt;a.length;i++)
 a[i]=(f.fileExists(c.run(&#039;fb&#039;,a[i]))||f.folderExists(c.run(&#039;FB&#039;,a[i])))+&#039;\t&#039;+a[i];

WScript.echo(a.join(&#039;\n&#039;));</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Thu, 07 Nov 2013 07:05:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77022#p77022</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=77015#p77015</link>
			<description><![CDATA[<p>Провёл эксперимент на тему &quot;что винда считает юникодом&quot;.<br />Отчет без претензий на полноту охвата.<br />Скачал 16 прграмм (в основном редакторы и утилиты) с заявленным отсутствием поддержки юникодных имен файлов.<br />Из них 7 прекрасно поддержали все тестовые пути/файлы (видимо, начиная с какой-то версии поддержка появилась).<br />Остальные, с незначительными отличиями*, продемонстрировали следующее поведение:<br />— все символы имени из одного диапазона:<br />1. все файлы с именами на латинице, любой (в пределах разумного) длины, с пробелами и без открываются нормально;<br />2. кириллица — то же самое;<br />3. латиница с диакритикой из второй половины западной (!) ANSI — то же самое**;<br />4. корявые символы из второй половины таблицы ANSI (Ђ,‡, «, », — …) — то же самое;<br />5. некоторые (не все) совсем уж юникодные символы, вроде &quot;?&quot;(смайлик) — (!!!) открываются, если нет пробелов, но (!) программа думает, что это совсем другие символы***;<br />— смешанные:<br />6. латиница + кириллица — прекрасно открываются;<br />7. латиница + латиница с диакритикой — то же самое**;<br />8. латиница + корявые символы из второй половины таблицы ANSI — то же самое;<br />9. кириллица + корявые символы из второй половины таблицы ANSI — (!) то же самое;<br />— не открываются:<br />10. греческие в любой комбинации, даже по одиночке — юникод;<br />11. кириллица + латиница с диакритикой — юникод (видимо, потому, что не могут быть в одной таблице ANSI любой кодовой страницы);<br />12. совсем уж юникодные символы из п.5 + любые другие, включая пробелы — юникод;<br />13. юникодные, которые &quot;не все&quot; из п.5, например &quot;?&quot;(солнышко)</p><p>*&nbsp; &nbsp;Отличия, действительно, незначительные: степень корявости отображения имени в заголовке окна и подобные. Правда, одна программка (к сожалению, забыл как зовут) пробивалась через юникодные имена папок, но не могла открыть файл с юникодным именем, остальные и через папки не проходят.<br />**&nbsp; С диакритикой вообще интересно: похоже, винде на неё чихать, по крайней мере, создать рядом файлы &quot;O&quot; и &quot;?&quot;(О с тильдой) нельзя...<br />*** Многие из таких символов заменяются на латинские буквы, но, если с диакритикой всё валидно — в папку &quot;G?te&quot;(2-я буква - u с умляутом) можно зайти как в &quot;Gute&quot;, то в папку &quot;?&quot;(смайлик) как в &quot;O&quot; не зайдёшь.</p><p>Для желающих повторить эксперимент: наиболее стабильно и, при этом, типично работает <a href="http://www.outertech.com/en/replacement-for-notepad">GetDiz</a></p><p>Я понимаю, что такая загогулина ни в одном стандарте не описана, но постараюсь решить задачку в существующих реалиях.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Wed, 06 Nov 2013 21:24:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=77015#p77015</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76947#p76947</link>
			<description><![CDATA[<p><strong>JSman</strong>, похоже, Вы опять правы. Прошу прощения за упрямство. Изучение проблемы, о котором я писал в #26 показало, что юникодовым именем файла (в интернете) называется такое имя, при котором файл не открылся в какой-то программе у называющего. Это &quot;определение&quot; не позволяет задать единственный критерий, но Ваш, пожалуй, лучший. По крайней мере, строго корректный.</p><p>Кстати, диапазон, наверное, надо уменьшить до 126, а то символ 0x7F тоже какой-то не совсем ансишный... Или, всё же, допустимый?</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 05 Nov 2013 19:47:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76947#p76947</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76942#p76942</link>
			<description><![CDATA[<div class="codebox"><pre><code>/[^а-яё\x01-\xFF]/i.test(e));</code></pre></div><p>Диапазон до \xFF явно неверно задан. Вернее будет от От 0 до 127 с учетом кириллицы.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 05 Nov 2013 16:58:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76942#p76942</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76929#p76929</link>
			<description><![CDATA[<p>Да, и на счет &quot;Ђ‡&quot; я теперь не уверен. Кажется, это всё-таки юникод...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 05 Nov 2013 07:54:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76929#p76929</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76928#p76928</link>
			<description><![CDATA[<p><strong>JSman</strong>, в целом Вы были правы (особенно, на счет того, что VBS ни при чем). Остановился пока на таком варианте:</p><div class="codebox"><pre><code>/[^а-яё\x01-\xFF]/i.test(e));</code></pre></div><p>но не уверен в универсальности решения.</p><p>А VBS, который я тоже пытался использовать, заменяет некоторые чисто юникодные символы на неизвестно откуда взятые ANSI аналоги.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 05 Nov 2013 07:51:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76928#p76928</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76409#p76409</link>
			<description><![CDATA[<p><strong>JSman</strong><br />Да про VBS - это к слову. Просто проблема оказалась несколько шире, чем я думал. И на счёт ANSI де факто не всё так просто. Например, имя &quot;Ђ‡&quot; ни разу не юникодовое...</p><p>Но всё равно спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Thu, 24 Oct 2013 22:27:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76409#p76409</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76350#p76350</link>
			<description><![CDATA[<p>И причем тут VBS?) <br />В примере я указал, что ANSI де факто символы 0-127 + Кирилица. Ну в общем чем мог, тем помог.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 22 Oct 2013 19:29:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76350#p76350</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76348#p76348</link>
			<description><![CDATA[<p><strong>JSman</strong><br />В принципе, да, но набор символов в регулярке надо несколько расширить.<br />Впрочем, в этой проблеме ещё несколько нюансов появилось: юникодовые имена по разному выдаются свойством name объекта файл (или папка), созданным fileSystemObject и Shell.Application (последний случай предпочтительнее), а с символами \x263A (смайлик) и \x263C (солнышко) ещё забавнее - в js они передаются нормально, а в vbs - заменяются на символы ANSI (0,O). В общем, требуется дополнительное изучение вопроса, т.к. победить с наскока не удалось.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 22 Oct 2013 19:22:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76348#p76348</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76323#p76323</link>
			<description><![CDATA[<div class="codebox"><pre><code>
var s=&quot;Привет:)&quot;;
WScript.Echo(/^[\u0001-\u0080а-я]*$/i.test(s).toString());
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Tue, 22 Oct 2013 09:44:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76323#p76323</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76175#p76175</link>
			<description><![CDATA[<p><strong>JSman</strong><br />Win 8.1 Preview : в обоих случаях вывод одинаковый, похоже, юникодовый.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sun, 20 Oct 2013 10:48:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76175#p76175</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76171#p76171</link>
			<description><![CDATA[<p>Если список файлов большой, то можно просто в первом случае запустить cmd с командой dir, а затем запустить cmd с параметром /u и dir, тогда сразу станет ясно, кто содержит юникодные символы, а кто нет.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sun, 20 Oct 2013 06:28:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76171#p76171</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76166#p76166</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>В принципе, ведь можно использовать формат *.wsf. Не думали над этим?</p></blockquote></div><p>Я даже дальше двинул: четвёртый день vbs изучаю. [censored/] Даже что-то получаться начало, но, Бог ты мой, [censored/] !!!</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 19 Oct 2013 17:58:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76166#p76166</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76165#p76165</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>И всё же, можно ли в js использовать виндовое преобразование, без написания собственного кода замены, как Asc в vbs?</p></blockquote></div><p>Не могу сказать. Подождём ответа наших специалистов. В принципе, ведь можно использовать формат *.wsf. Не думали над этим?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Sat, 19 Oct 2013 15:47:20 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76165#p76165</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=76162#p76162</link>
			<description><![CDATA[<p><strong>alexii</strong>, и правда, не преобразует. Дамп тому свидетель... Просто первые 128 символов имеют те же коды, если не считать нулевой байт (в смысле, со значением 0x00). Был не прав.</p><p>И всё же, можно ли в js использовать виндовое преобразование, без написания собственного кода замены, как Asc в vbs?</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 19 Oct 2013 14:08:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=76162#p76162</guid>
		</item>
	</channel>
</rss>
