On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 77
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 18.09.19 15:56. Заголовок: UTF8, RU1251, CP866


У меня возник вопрос:

- Основная часть текста программы набрана и подключена на кодовой странице RU1251 с множеством пользовательских функций
- База данных на CP866
- Часть текста программы набрана и подключена на кодовой странице UTF8 для работы с MS Word

как я понимаю, если с БД вызываются данные, то они автоматически переводятся на текущую кодовую страницу, типа hb_Translate(cDATA,"CP866","RU1251")
а если с части программы где UTF8, вызываю пользовательскую функцию (RU1251) которая работает с БД CP866,
то как здесь реализован механизм ?

Пользовательская функция произведет hb_Translate(cDATA,"CP866","RU1251"),
и далее hb_Translate(cDATA,"RU1251","UTF8"),
то есть на выходе полученная переменная с текстовым данным будет в формате кодовой страницы UTF8
или
все-таки примет кодовую страницу где находилась пользовательская функция (RU1251) ?

*конечно, в дальнейшем всю прогу переведу на UTF8, но в данный момент времени требуется только эту часть
*да и этот момент интересен

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


постоянный участник




Пост N: 2891
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 18.09.19 16:23. Заголовок: Посмотрите тему hbed..


Посмотрите тему hbedit (исходники), hb_Translate() можно обходить таким способом (кусочек из fedit.prg hbedit)
 
hb_cdpSelect( "RU866" )

@ 09, 10, 15, 72 BOX "┌─┐│┘─└│ "
@ 13, 20 SAY "├"
@ 13, 60 SAY "┤"
@ 13, 11 TO 13, 71
hb_cdpSelect( oEdit:cp )

@ 10, 12 SAY "Open file"
@ 12, 12 SAY "[ ] ReadOnly"
@ 12, 27 SAY "[ ] In a current window"


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3884
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.09.19 16:50. Заголовок: Можно сделать вызов ..


Можно сделать вызов пользовательской функции следующим образом:

Вместо

cRet := userFunc(..)

сделать

cRet := UTFUserFunc({|| userFunc(..)})

и

Function UTFuserFunc(Block)
local cRet
hb_cdpSelect( "RU1251" )
cRet := Eval(Block)
hb_cdpSelect( "UTF8" )
Return hb_Translate(cRet,"RU1251","UTF8")

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 78
Зарегистрирован: 22.04.15
ссылка на сообщение  Отправлено: 18.09.19 17:44. Заголовок: нашел проблему: оказ..


нашел проблему:
оказывается в процессе работы, в переменную строки - цепляю вперемешку с разных кодировок, в итоге
например часть текста UTF8 корректно переводит в RU1251, а часть текста которая итак была на RU1251 переводит в кракозябры (что и смутило )
- и получается нормально-кракозябный текст
*в дальнейшем буду отслеживать, чтобы переменная строки была одной кодировки, пока всё не переведу на UTF8

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 647
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет