[ID CS4-CS6] getFiles и буква "й" на Mac

Tiburtsy

Топикстартер
15 лет на форуме
Сообщения
60
Реакции
14
Продолжаем исследовать функцию getFiles. На Mac она даёт имя файла с буквой "й" как два символа и обычный поиск "й" не даёт результатов. На Win10 поиск в скрипте работает без проблем. Подозреваю, что "ё" и "ь", а также другие символы, например, из немецкого алфавита с умляутами и прочей хренью, дадут тот же результат. Простого решения не нашёл. Есть мысли по теме, может кто сталкивался? Совет- не использовать русский алфавит не приемлем - база файлов медийных персон, русские и латиницей имена, источник фото (всё в названии файла), три дизайнера - не проконтролируешь, около 1000 файлов в сетевом хранилище.
 

~RA~

Одарённая.
12 лет на форуме
Сообщения
11 860
Реакции
3 450

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
это какое имя?
Screenshot 2019-01-18 04.15.02.png
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
вот так в общем можно, подумаешь, два символа )

Код:
var a = Folder.selectDialog();
var b = a.getFiles(isFile);
$.writeln(b.toSource());

function isFile(obj)
{

    if (File(obj).displayName.indexOf("\u0438\u0306")!=-1) return true;
    
    return false;
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844
Здесь коллизию с буквой "й" на маке уже описывали уже немножко в другом аспекте - помнится, файл не импортивался из-за наличия диакритики в названии. На самом деле, проблема чисто организационная - один набирает так, другой иначе, никуда от этого не денешься. То же самое, как с буквой ё - одни набирают правильно, другие бывают на е, третьи вообще латинскую пишут. Придется проверять все варианты, благо их не так много.
 

Tiburtsy

Топикстартер
15 лет на форуме
Сообщения
60
Реакции
14
Здесь коллизию с буквой "й" на маке уже описывали уже немножко в другом аспекте - помнится, файл не импортивался из-за наличия диакритики в названии. На самом деле, проблема чисто организационная - один набирает так, другой иначе, никуда от этого не денешься. То же самое, как с буквой ё - одни набирают правильно, другие бывают на е, третьи вообще латинскую пишут. Придется проверять все варианты, благо их не так много.
Имя файла задаётся во время записи из фотошопа. Там букву "й" сложно набрать по другому, как и "ё".
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844
if(File(a).displayName=="й"){$.writeln(i)}//никогда под Mac
}
Вообще то в редакторе сообщений есть специальный тег кода </>, в который надо такие выражения заворачивать
Дабы не было подобных коллизий
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844

люди_будущего

Участник
Сообщения
37
Реакции
34
@Tiburtsy,
JavaScript:
#target "estoolkit"   /* whatever */

if ( 'function' !== typeof String.prototype.normalize ) {
/*   
    load once
*/
    $.evalFile ( 'es5-shim.js' );   // for reduceRight only, actually
    $.evalFile ( 'unorm.js' );
}

$.writeln( "\u0438\u0306".normalize( 'NFC' ).length );  // 1
$.writeln( "й" === "\u0438\u0306".normalize());         // true
$.writeln( "àáâãäå".normalize( 'NFD' ).length );        // 12

UAX #15: Unicode Normalization Forms
String.prototype.normalize()
https://github.com/walling/unorm
https://github.com/es-shims/es5-shim


P.S. Никто, конечно, не набирает "й" как "\u0438\u0306". MacOS нормализует к NFD.
 
Последнее редактирование:
  • Спасибо
Реакции: Tiburtsy и Skvoznyak

Tiburtsy

Топикстартер
15 лет на форуме
Сообщения
60
Реакции
14
Ваш способ не прошёл - выдал где-то ошибку. На досуге потестирую ещё.
Сделал так:
JavaScript:
var diacritic={
    "\u0438\u0306": "й",
    "\u0418\u0306": "Й",
    "\u0435\u0308": "ё",
    "\u0415\u0308": "Ё"
};
var sTemp=[];for(var key in diacritic) sTemp.push(key);
var regDiacritic=new RegExp(sTemp.join("|"),"g");
//...
s=t.displayName.replace(regDiacritic,function(key){return diacritic[key]});
Может код не оптимален, не знаю как избавиться от временного массива, но можно добавлять другие проблемные символы (фактически замена по списку в RegExp). И работает!
 
Последнее редактирование:

люди_будущего

Участник
Сообщения
37
Реакции
34
Попробуйте вместо включения первой библиотеки добавить polyfill. Даже не спрашиваю, что бы значило "выдал где-то ошибку", т.к. у меня и мака-то нет, и + если работает -- достаточно. Но если что, люди вообще все "проблемные символы" предусмотрели, в этом и смысл использования библиотеки.
 
  • Спасибо
Реакции: Skvoznyak

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 185
Реакции
10 844