ПодключитьСценарий() - ошибка "Неверное значение аргумента" при содержании "й" в названии класса
В ПодключитьСценарий вторым параметром передаётся строка с именем класса. Если передать туда строку содержащую "й" то возникает исключение: Неверное значение аргумента
Воспроизведение ошибки
- Создать любой скрипт и вызвать в нём
ПодключитьСценарий("адрес", "НовыйКласс") - Запустить код ...
- Увидеть ошибку
Ожидаемое поведение Класс регистрируется без возникновения исключения
Окружение
- ОС: MacOS 15
- Версия: 2.0 rc6
Дополнительная информация Возможно будет ругаться и на "ё"
Важно - маковская й вечно создаёт проблемы
и ё тоже. Это не ошибка, многобуквенные буквы компилятором сейчас не поддерживаются (в 1С тоже не поддерживаются)
И чё делать?)
Не писать двусимвольную й на маке. Возможно можно что-то настроить, чтобы использовалась нормальная?
Черт его знает, я жму Й и всё. и нет тут никаких двух символов
Юникод вьювером посмотри
Применить String.Normalize() везде, где в строке должен быть идентификатор?
Или даже String.Normalize(NormalizationForm.FormKC)
Применить
String.Normalize()везде, где в строке должен быть идентификатор? Или дажеString.Normalize(NormalizationForm.FormKC)
Это незнакомая мне магия, но если это оно, то да, имеет смысл. Правда лексер передвигается на следующий символ по i++ и Normalize, кажется, будет недостаточно
Строка собирается лексером от кавычки до кавычки. Как соберётся - нормализовать.
С другой стороны, ПодключитьСценарий ошибки не вызывает, там нормальная буква или нет?
Я думаю это достаточно сделать только для процедуры "ПодключитьСценарий"
Строка собирается лексером от кавычки до кавычки. Как соберётся - нормализовать.
Так речь же не только про кавычки, ё и й могут быть и в идентификаторах. А Лексер переходит на следующую букву инкрементом позиции. И сейчас он будет попадать на знак диакритики, вместо следующей значащей буквы
Нет стопроцентно совместимого решения.
Понятно, что в идентификаторах должны быть только символы UNICODE Letter, но чем модифицировать под нормализацию лексер, лучше явно наложить такое требование на исходники.
Что делает с комбинированными символами редактор - видимо, зависит от настроек редактора, если такие есть.
С файлами хуже. В маковской HFS+ выполняется принудительная денормализация имён, а в APFS уже нет.
Если Файл.Существует("МойФайл.txt") - непереносимо.
#Если MacOS не поможет.
Для библиотек можно придумать что-нибудь с lib.config, но нужно ли?..
Won't (or can't) fix?
wontfix, конечно же. Извращенцы из Apple, придумывающие ни с чем не совместимую ересь, не должны навязывать ее всем подряд.
У меня, и не только, динамически создаваемые классы из файлов, мне бы как то обойти этот прикол) Я так понимаю на уровне платформы решаться это не будет
ИмяКласса = "НовыйКласс";
#Если MacOS тогда
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1048)+Символ(774), Символ(1049)); // Й
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1080)+Символ(774), Символ(1081)); // и
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1045)+Символ(776), Символ(1025)); // Ё
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1077)+Символ(776), Символ(1105)); // ё
#КонецЕсли
ПодключитьСценарий(Адрес, ИмяКласса);
Спасибо)))