Проблема с кодировкой TPS

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Admin писал(а): Нормальная программа. Уже несколько лет пользуюсь. Кларион не ломался никогда.
А я и не говорил, что CClean ломает Clarion. Я написал о том, что эта программ распространяется фишинговами
методами фоновой установки и поэтому "пролазит" на компьютеры там где ее никто не ставил. Это разное.
К тому же проблемы возникают не со средством разработки, с ключами БД TPS при работе приложения. Тоже другое.
А в остальном понятно. :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Shur писал(а): Для любителей готовых решений (знаю, есть у нас такие!), набросал код для получения текущего состояния CLACOLSEQ.
Выполнил диагностику CLACOLSEQ - результат получился странным.

1. По Вашему способу - таблицы сортировки печатных символов на компьютерах полностью одинаковы.

2. А вот если выгрузить и отсортировать таблицу символов с кодами от 1 до 255, то в зоне непечатных символов (1-31)
есть расхождения, но это не важно. Еще есть сдвиг зоны спецсимволов !"#$%&()*,./:;?@[\]^_`{|}~¦‘’, из-за чего спецсимволы
могут попадать на коды управляющих, что похоже и вызывает проблему c индексами.

Из-за чего возникли эти расхождения - по прежнему не понятно. :(
Make Clarion Great Again ! 😎
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с кодировкой TPS

Сообщение Shur »

Игорь Столяров писал(а): 2. На проблемном компьютере загрузить этот файл как CLACOLSEQ.
И не вникая в суть возникновения проблемы, мы ее решаем. Это достойно того, что бы попробовать ...
А что говорит последний акт балета? Меня, честно говоря, в первую очередь это беспокоит.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Закрываю тему, и переустанавливаю проблемную копию Windows.
Танцы с бубном результата не дали. Нельзя взять некую произвольную последовательность из 255 символов и
переустановить по ней порядок сортировки с помощью CLACOLSEQ. Ну или мне это не удалось сделать.
Насколько я смог понять, эта настройка имеет корни совместимости с DOS и работает с 222 символами.

Из того, что было интересно.
Оказалось, что последовательности сортировки в WinXP и Win7/8/10 - отличаются в зоне служебных символов (с кодами 1-31).
Make Clarion Great Again ! 😎
Ал
✯ Ветеран ✯
Сообщения: 1040
Зарегистрирован: 08 Июль 2005, 6:48
Откуда: Россия
Поблагодарили: 1 раз

Проблема с кодировкой TPS

Сообщение Ал »

Игорь, любопытно, а в Win10 (не имел дела с ней пока :)) есть реестр?, там в HKEY_LOCAL_MACHINE\SYSTEM\...ControlSet...\Control\Nls\CodePage\... в 1251 и 1252 - одинаковые значения на всех компах?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Ал писал(а): Игорь, любопытно, а в Win10 есть реестр?, там в HKEY_LOCAL_MACHINE\SYSTEM\...ControlSet...\Control\Nls\CodePage\... в 1251 и 1252 - одинаковые значения на всех компах?
Да, все значения одинаковые.
Гипотетически была мысль начать замещать NLS файлы с одного компьютера на другой, но это уже перебор ....
т.к. может непредсказуемо аукнуться на самой Windows и других программах.
Make Clarion Great Again ! 😎
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с кодировкой TPS

Сообщение Shur »

Если есть достаточно высокая уверенность, что дело в CLACOLSEQ, то можно пойти по следующему пути:
- прописать в env-файлах (или в коде программы при помощи оперторов LOCALE) явные значения CLACOLSEQ и CLACASE, не полагаясь на дефолтовые значения и значения типа =WINDOWS;
- разово осуществить перестроение таблиц полностью или только ключей с символьными составляющими при помощи команды BUILD.

Разумеется, для начала сделать это надо на проблемном компе и хотябы одном нормальном и на резервной копии базы данных и проверить результат.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Если только Вам это интересно .... Смотрите, что получается (для удобства ответа - по пунктам).

Что бы понять алгоритмику CLACOLSEQ, давайте, для простоты, формализуем задачу и предположим, что меня
посетила фантазия сортировать цифры в обратном порядке (9876543210) и я хочу это сделать с помощью CLACOLSEQ ....
Также у меня есть функция GetCurSEQ() которая возвращает отсортированную строку из всех 255 символов,
по текущей настройке CLACOLSEQ, как Вы описали это через сортировку очереди.

1. По умолчанию приложение Clarion имеет сортировку ANSI.
2. Я могу выполнить Locale('CLACOLSEQ','9876543210') и получу сортировку ANSI с обратной сортировкой чисел. OK !
3. Я могу выполнить Locale('CLACOLSEQ','Windows') и получу сортировку по региональным настройкам Windows. OK !
4. Но я не могу получить сортировку Windows с обратной сортировкой чисел.
Если я выполняю последовательно:

Код: Выделить всё

 Locale('CLACOLSEQ','Windows')
 Locale('CLACOLSEQ','9876543210')
 Message(GetCurSEQ())
то все получается результат из п.2 (т.е. затирается сортировка Windows)
Если я выполняю:

Код: Выделить всё

 Locale('CLACOLSEQ','Windows')
 Loc:Str255 = GetCurSEQ()
 ChangeString(Loc:Str255,'0123456789','9876543210')  ! Замена в строке порядка следования цифр
 Locale('CLACOLSEQ',Loc:Str255)
 Message(GetCurSEQ())
То получается какая-то мешанина из символов .... :(
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2599
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 27 раз

Проблема с кодировкой TPS

Сообщение Губин Игорь »

Игорь Столяров писал(а): Не. Менять программу нельзя. С других компьютеров ведь работа с БД ведется нормально ...
Можно, Я сказал! :cat:

Если не хочется менять саму программу, то проще сделать файл env с именем программы и кинуть в каталог программы.
В env пишем правильные clacase и clacharset/ Этого более чем достаточно. Но, лично я бы, посмотрел, не валяется ли там уже неправильный env или в программе не те locale()

Файл TPS хранит в себе локаль с которой его создали. Т.ч., если всё сделать правильно, он довольно устойчив к неправильным настройкам виндов.

Код: Выделить всё

CLACHARSET=WINDOWS
CLACASE=QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮqwertyuiopasdfghjklzxcvbnmйцукенгшщзхёфывапролджэячсмитьбю


такой ENV, в принципе, минимально достаточен и правилен для файлов с русской кодировкой.
Для надёжности можно все TPS пропустить через TPSFIX с таким env и генерацией ключей, хуже не будет
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Губин Игорь писал(а): Файл TPS хранит в себе локаль с которой его создали.
Повторяю специально для тех, кто решил смотреть наш сериал с 25 серии ... ;)
Таблицы сортировки в зоне печатных символов - одинаковы. Расхождения в зоне спецсимволов (коды 1-31).
А вот ее переустановить не получается. :(

clacase и clacharset - не влияют на сортировку индексных файлов. Это управление Upper()/Lower() и отображением.
Посмотрите справку, там же все это есть ....

Не получается полностью воспроизвести последовательность сортировки на одном компьютере с другого.
Скорее всего CLASEQ для этого не предназначен и это как-то делается средствами WinAPI ....
Make Clarion Great Again ! 😎
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2599
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 27 раз

Проблема с кодировкой TPS

Сообщение Губин Игорь »

Игорь Столяров писал(а): clacase и clacharset - не влияют на сортировку индексных файлов
Да шо ви говорите?! :idied: :idied: :idied:
Вот и смотрите справку! Это же элементарно: если upper/lower неправильно отрабатываются, то сортировка начинает глючить, т.к., к примеру, А и а, воспринимаются как разные символы. Аналогичный, правда не такой выраженный, эффект имеет и смена charset.

Т.ч. не надо сразу наезжать, а то ведь невежливо получится.
Игорь Столяров писал(а): То получается какая-то мешанина из символов ....
А можно код ChangeString в студию?
Там не может получится "зацикливания"? Сначала меняем 0 на 9, а потом 9 на 0?
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

Губин Игорь писал(а): Т.ч. не надо сразу наезжать, а то ведь невежливо получится.
Абсолютно никаких наездов. Если стиль сообщений в чем-то некорректен, извините, скорее всего от двухдневного копания в этом г ... :(
Губин Игорь писал(а): Это же элементарно: если upper/lower неправильно отрабатываются, то сортировка начинает глючить
Все абсолютно верно. Только это никак не влияет на построения индексных файлов и чтение информации по этим индексам.
Я не буду здесь повторять фрагменты справки .... см. по слову Environment Files -> CLACOLSEQ
Губин Игорь писал(а): А можно код ChangeString в студию?
Там ничего военного - поиск полной строки Instring() и замена на другую подстроку.
И естественно результат замены был проверен ....

Я уже писал, там беда в другом. Вроде бы CLACOLSEQ работает со строкой из 222 символов ...
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8090
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 29 раз
Поблагодарили: 98 раз

Проблема с кодировкой TPS

Сообщение Игорь Столяров »

И все-таки финал истории позитивный !
Передал проблему сисадминам, т.к. программно устранить проблему я не смог.
Сказал, что пусть переставляют что-хотят, но что бы все Windows возвращали одинаковые последовательности сортировки.
Сисадмины ответили "Нафиг !", тупо скопировали в папку System32\ файлы *.nls с другого компьютера и пошли опять курить.
Все заработало. :idied:
Make Clarion Great Again ! 😎
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Проблема с кодировкой TPS

Сообщение Shur »

Всё-таки мы здесь не видим ни кода GetCurSEQ() ни кода ChangeString (хотя и было пояснено, что там простая замена подстрок).
Теперь:
Игорь Столяров писал(а):
4. Но я не могу получить сортировку Windows с обратной сортировкой чисел.
Если я выполняю последовательно:

Код: Выделить всё

Locale('CLACOLSEQ','Windows') 
Locale('CLACOLSEQ','9876543210') 
Message(GetCurSEQ())
то все получается результат из п.2 (т.е. затирается сортировка Windows)
А что ожидалось-то? CLACOLSEQ работает не на кусок последовательности, он действительно перезатирает прежнюю сортировочную строку. Нет?
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2599
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 27 раз

Проблема с кодировкой TPS

Сообщение Губин Игорь »

Игорь Столяров писал(а): Все абсолютно верно. Только это никак не влияет на построения индексных файлов и чтение информации по этим индексам
Не буду спорить, поскольку у меня результат перед глазами :cat:
Игорь Столяров писал(а): Вроде бы CLACOLSEQ работает со строкой из 222 символов
254 - 32 (код "!") = 222
Т.е. Виндоус считает печатными 222 символа (откройте программу таблица символов). Потому и клаколсек не видит смысла в большей строке. Вполне разумно
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить