<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: Определить юникодность имени файла - как?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8783&amp;type=atom" />
	<updated>2013-11-07T07:05:34Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8783</id>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77022#p77022" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-07T07:05:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77022#p77022</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=77015#p77015" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-06T21:24:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=77015#p77015</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76947#p76947" />
			<content type="html"><![CDATA[<p><strong>JSman</strong>, похоже, Вы опять правы. Прошу прощения за упрямство. Изучение проблемы, о котором я писал в #26 показало, что юникодовым именем файла (в интернете) называется такое имя, при котором файл не открылся в какой-то программе у называющего. Это &quot;определение&quot; не позволяет задать единственный критерий, но Ваш, пожалуй, лучший. По крайней мере, строго корректный.</p><p>Кстати, диапазон, наверное, надо уменьшить до 126, а то символ 0x7F тоже какой-то не совсем ансишный... Или, всё же, допустимый?</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-05T19:47:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76947#p76947</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76942#p76942" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>/[^а-яё\x01-\xFF]/i.test(e));</code></pre></div><p>Диапазон до \xFF явно неверно задан. Вернее будет от От 0 до 127 с учетом кириллицы.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2013-11-05T16:58:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76942#p76942</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76929#p76929" />
			<content type="html"><![CDATA[<p>Да, и на счет &quot;Ђ‡&quot; я теперь не уверен. Кажется, это всё-таки юникод...</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-05T07:54:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76929#p76929</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76928#p76928" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-11-05T07:51:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76928#p76928</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76409#p76409" />
			<content type="html"><![CDATA[<p><strong>JSman</strong><br />Да про VBS - это к слову. Просто проблема оказалась несколько шире, чем я думал. И на счёт ANSI де факто не всё так просто. Например, имя &quot;Ђ‡&quot; ни разу не юникодовое...</p><p>Но всё равно спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-10-24T22:27:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76409#p76409</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76350#p76350" />
			<content type="html"><![CDATA[<p>И причем тут VBS?) <br />В примере я указал, что ANSI де факто символы 0-127 + Кирилица. Ну в общем чем мог, тем помог.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2013-10-22T19:29:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76350#p76350</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76348#p76348" />
			<content type="html"><![CDATA[<p><strong>JSman</strong><br />В принципе, да, но набор символов в регулярке надо несколько расширить.<br />Впрочем, в этой проблеме ещё несколько нюансов появилось: юникодовые имена по разному выдаются свойством name объекта файл (или папка), созданным fileSystemObject и Shell.Application (последний случай предпочтительнее), а с символами \x263A (смайлик) и \x263C (солнышко) ещё забавнее - в js они передаются нормально, а в vbs - заменяются на символы ANSI (0,O). В общем, требуется дополнительное изучение вопроса, т.к. победить с наскока не удалось.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-10-22T19:22:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76348#p76348</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76323#p76323" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>
var s=&quot;Привет:)&quot;;
WScript.Echo(/^[\u0001-\u0080а-я]*$/i.test(s).toString());
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2013-10-22T09:44:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76323#p76323</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76175#p76175" />
			<content type="html"><![CDATA[<p><strong>JSman</strong><br />Win 8.1 Preview : в обоих случаях вывод одинаковый, похоже, юникодовый.</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-10-20T10:48:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76175#p76175</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76171#p76171" />
			<content type="html"><![CDATA[<p>Если список файлов большой, то можно просто в первом случае запустить cmd с командой dir, а затем запустить cmd с параметром /u и dir, тогда сразу станет ясно, кто содержит юникодные символы, а кто нет.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2013-10-20T06:28:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76171#p76171</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76166#p76166" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>В принципе, ведь можно использовать формат *.wsf. Не думали над этим?</p></blockquote></div><p>Я даже дальше двинул: четвёртый день vbs изучаю. [censored/] Даже что-то получаться начало, но, Бог ты мой, [censored/] !!!</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-10-19T17:58:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76166#p76166</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76165#p76165" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>И всё же, можно ли в js использовать виндовое преобразование, без написания собственного кода замены, как Asc в vbs?</p></blockquote></div><p>Не могу сказать. Подождём ответа наших специалистов. В принципе, ведь можно использовать формат *.wsf. Не думали над этим?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2013-10-19T15:47:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76165#p76165</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Определить юникодность имени файла - как?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=76162#p76162" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, и правда, не преобразует. Дамп тому свидетель... Просто первые 128 символов имеют те же коды, если не считать нулевой байт (в смысле, со значением 0x00). Был не прав.</p><p>И всё же, можно ли в js использовать виндовое преобразование, без написания собственного кода замены, как Asc в vbs?</p>]]></content>
			<author>
				<name><![CDATA[Serge Yolkin]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27503</uri>
			</author>
			<updated>2013-10-19T14:08:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=76162#p76162</id>
		</entry>
</feed>
