Проблема Конвертация текста из Win1251 в UTF8 и обратно

Ficoos

Lotus Team
15.03.2016
152
5
BIT
269
Суть проблемы в том, что базы крутятся на виндовом сервере, а всплывающие сообщения (MSGBOX) надо сделать, что бы было читабельно для MAC OS. Раньше, лет 10 назад пользовался чьей-то рукописной базой, в которую вставляешь текст, и он выдает уже строку кодирования, типа (UChr(1057)&UChr(1086) + ...). Или обратно, вставляя текст типа: (UChr(1057)&UChr(1086)&... ) - выдает текст. Может у кого-то есть такая приблуда? Оооочень надо.
 

Ficoos

Lotus Team
15.03.2016
152
5
BIT
269
о! не думал, что никого не интересует. Буду сам делать. Спасибо!
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Вроде бы с MessageBox никогда не было проблем если вы показываете строку из кода LS.
Где вы берёте ваши строки в неправильной кодировке? Они зашиты в коде или загружаются откуда-то?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Вроде бы с MessageBox никогда не было проблем если вы показываете строку из кода LS.
Где вы берёте ваши строки в неправильной кодировке? Они зашиты в коде или загружаются откуда-то?
предположу - из файла, без указания кодировки
 

Ficoos

Lotus Team
15.03.2016
152
5
BIT
269
Вроде бы с MessageBox никогда не было проблем если вы показываете строку из кода LS.
Где вы берёте ваши строки в неправильной кодировке? Они зашиты в коде или загружаются откуда-то?
Это был вопрос отображения текста, который формируется в Винде, а показать надо на Mac OS.
Тут надо перекодировать обычный текст в кодировку для Mac OS. Просто текст (Может быть взят из библиотеки LSS) перебирается посимвольно, выявляется код символа и преобразовывается в текст:
Visual Basic:
Dim azAlphabet As String

    dim tmp as String
    txt$ = "Привет!" ' На Mac OS текст виден как квадратики с вопросительными знаками внутри.
    For i = 1 to len(txt$)
     
        if i = 1 then
            azAlphabet = Uni(Left(txt$, i)) 'код символа в UTF-8 в тексте переменной txt$
            tmp = UChr(azAlphabet) 'Символ UTF-8 его кода в UTF-8
        else
           azAlphabet =  Uni(Right(Left(txt$, i), 1))
            tmp = tmp  + UChr(azAlphabet)
        end if
  
    Next

    MsgBox tmp ' Текст отлично виден как в Винде, так и на Mac OS
Вот чтобы текст увидеть и нужно преобразовывать его.
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
txt$ = "Привет!" ' На Mac OS текст виден как квадратики с вопросительными знаками внутри.

Последний раз работал с Mac-ом с версией 8.5 - не было такой проблемы.
Это какая-то новая фича?
Или текст у вас не из переменной, а из файла или ещё откуда то.
 

Ficoos

Lotus Team
15.03.2016
152
5
BIT
269
Последний раз работал с Mac-ом с версией 8.5 - не было такой проблемы.
Это какая-то новая фича?
Или текст у вас не из переменной, а из файла или ещё откуда то.
Текст зашит в библиотеке LSS на сервере, которая крутится на Винде. На счет маков - стоят у начальства много лет и на винду переходить не хотят. В добавок ко всему прибавилась проблема рассылки СМС уведомлений на мобилы.
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
На счет маков - стоят у начальства много лет и на винду переходить не хотят
Я их прекрасно понимаю.
Если текст является частью кода, то он корректно отображается клиентом Notes в любой ОС - Windows/MacOS/Linux и ничего специального для этого делать не надо. Если же текст загружен из внешнего файла, то он будет отображен в той же кодировке в какой был в файле, если не предпринять специальных действий при чтении файла. Если же ваша библиотека вынесена во внешний файл, то такой эффект тоже возможен. Так было всегда. Может что-то поменялось со сменой власти...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Текст зашит в библиотеке LSS на сервере, которая крутится на Винде. На счет маков - стоят у начальства много лет и на винду переходить не хотят. В добавок ко всему прибавилась проблема рассылки СМС уведомлений на мобилы.
текст в библиотеке, нв шинде, всегда в 1251, если специвально не указать в настройках дизигнера
текст нужно хранить:
- в файлах
- в доках
- в сервисах
НО никак не в коде библиотеки
либо надо чтобы дизигнер всё гнал в UTF8

уже давно не 95год а в шинде все в том времени ;)
как вы будете поддерживать мультиязычность - перекодеры писать и анализаторы тескта?
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
текст в библиотеке, нв шинде, всегда в 1251, если специвально не указать в настройках дизигнера
Но если я пишу в дизайнере, а оно конечно же в Windows
Код:
MessageBox "Привет", 64, "Внимание"
, то это корректно отображается в любой ОС. Разве нет?
 

savl

Lotus Team
28.10.2011
2 624
314
BIT
517
Но если я пишу в дизайнере, а оно конечно же в Windows
Код:
MessageBox "Привет", 64, "Внимание"
, то это корректно отображается в любой ОС. Разве нет?
Так то будет везде одинаково, потому что код именно внутри либы в nsf.
А вот проблемы с файлами, могут быть если они как %include% "liba.lss" подключены, если там будет UTF-8/1251/cpp866 , то вот та кодировка и будет подтягиваться.
 

VladSh

начинающий
Lotus Team
11.12.2009
1 797
158
BIT
232
Интересно, а можно подобрать такую кодировку, чтобы оно во всех ОС подтягивалось с читаемым текстом?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Интересно, а можно подобрать такую кодировку, чтобы оно во всех ОС подтягивалось с читаемым текстом?
можно - если индусы сподобятся сделать как положено, а не "привет из 90х"
шинда с версии хрю (а это 2002) поддерживает штатно ютф8 и вся проблема в виндо пейсателях программ
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
Так то будет везде одинаково, потому что код именно внутри либы в nsf.
А вот проблемы с файлами, могут быть если они как %include% "liba.lss" подключены, если там будет UTF-8/1251/cpp866 , то вот та кодировка и будет подтягиваться.
О! А то мне показалась, что у нас разногласия. Именно это я и пытался сказать @Ficoos выше, надеюсь он нас понял.
 

Ficoos

Lotus Team
15.03.2016
152
5
BIT
269
текст в библиотеке, нв шинде, всегда в 1251, если специвально не указать в настройках дизигнера
текст нужно хранить:
- в файлах
- в доках
- в сервисах
НО никак не в коде библиотеки
либо надо чтобы дизигнер всё гнал в UTF8

уже давно не 95год а в шинде все в том времени ;)
как вы будете поддерживать мультиязычность - перекодеры писать и анализаторы тескта?
Да, в файле, и переносить в базу проблемматично, так как библиотеку используют более десятка баз. Это библиотека сообщений об ошибках и туда записаны тексты, выдаваемые пользователю при ошибке программы или его действий. Как понимаете, этого текста много и переносить в каждую базу эти тексты долгая процедура.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 983
611
BIT
453
Да, в файле, и переносить в базу проблемматично, так как библиотеку используют более десятка баз. Это библиотека сообщений об ошибках и туда записаны тексты, выдаваемые пользователю при ошибке программы или его действий. Как понимаете, этого текста много и переносить в каждую базу эти тексты долгая процедура.
ну отсюда две проблемы:
- не будет работать везде одинаково (винда/линукс/мак), в нотусне
- на сервере и клиенте - будет по-разному отображать (зависимо от настроек локали)
в базу переносить можно кусками - просто выносить константы (текстовые) в отдельный модуль/библиотеку (а его уже Use)
 

garrick

Lotus Team
26.10.2009
1 367
152
BIT
348
ну отсюда две проблемы:
- не будет работать везде одинаково (винда/линукс/мак), в нотусне
- на сервере и клиенте - будет по-разному отображать (зависимо от настроек локали)
в базу переносить можно кусками - просто выносить константы (текстовые) в отдельный модуль/библиотеку (а его уже Use)
Если файл сохранить в UTF-8, то на MacOs и Linux будет одинаково, на счёт Windows не уверен, хотя на всех современных версиях с UFT-8 проблем нет. Я думаю если сделать специальную функцию чтения в UTF-8, то проблем не должно быт нигде, но и файл не забыть сохранить в правильной кодировке.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!