Автор | Сообщение |
|
| |
Пост N: 59
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 04:44. Заголовок: Word unicode-символ
Вопрос, какая функция (готовая) выводит Unicode-символ на MS Word или надо ручками рисовать? как представить на Hb двухбайтный символ или более...
|
|
|
Ответов - 31
, стр:
1
2
All
[только новые]
|
|
|
| Администратор
|
Пост N: 3879
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.09.19 08:46. Заголовок: Харбор в любом случа..
Харбор в любом случая передает в word строку в unicode Чтобы unicode был в самом харборе, и харбор не делал бы перекорировку при присвоении <Range>:Value := cValue надо в программе установить кодовую страницу utf8, и строку формировать уже в этой кодировке: cValue := Chr(n1)+Chr(n2)+... или cValue := I2Bin(nn) + ... где nn - код двухбайтного символа
|
|
|
|
| |
Пост N: 60
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 10:06. Заголовок: вставил все-таки: o..
*PRIVAT*
|
|
|
|
| постоянный участник
|
Пост N: 2833
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 10:15. Заголовок: Pasha пишет надо в п..
Pasha пишет цитата: | надо в программе установить кодовую страницу utf8, и строку формировать уже в этой кодировке |
| cValue := hb_StrToUtf8( cValue [, cCodePage] ) Разве нельзя воспользоваться вторым параметром ?
|
|
|
|
| постоянный участник
|
Пост N: 2834
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 10:39. Заголовок: PS не меняя страницу..
PS не меняя страницу на utf8 cValue := hb_StrToUtf8( cValue ) должно быть достаточно для понимания wordом или нет
|
|
|
|
| |
Пост N: 61
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 11:11. Заголовок: Word понимает CP 125..
Word понимает CP 1251 без Hb_StrToUTF8(cValue), задача была: Программно воткнуть текст с содержанием UNICODE символа. К примеру, текст "Это символ Ө с кодом 04Е8" text:="Это символ "+ cSIMVOL+" с кодом 04Е8" нужно было переменную cSIMVOL как-то представить (типа CharW() ), чтобы при вставке в Word корректно отобразился символ " Ө" или весь текст ) в том то и дело, "стандартный текст" могу просто набрать, а "специфические символы" нужно указать код, к примеру U+04E8, но как ? реализуется в Hb ? к примеру даже пробовал hb_strtoutf8(i2bin(1186)) получил на Word Сћ
|
|
|
|
| постоянный участник
|
Пост N: 2835
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 12:34. Заголовок: Новичок пишет Програ..
Новичок пишет цитата: | Программно воткнуть текст с содержанием UNICODE символа. |
| hb сам переводит utf8 -> unicode, задача стоит символы ru1251 -> utf8 и потом какие то символы utf8 заменить на др. символы utf8 (нац. кодировки). Правильно понимаю ? Если да, то вроде, достаточно массив с соответствием utf8 значений aSim := {{utf8(1251), utf8(нац. символ), ... } и по идее cValue := hb_StrToUtf8(cValue) AEval(aSim, {|as|, cValue := StrTran(cValue, as[1], as[2]) }) или с ф-ями поиска hb_Utf8At(), hb_Utf8Substr() и т.д. вопрос, по мне, надо ставить страницу utf8 для работы с вордом или hb\word поймет правильно utf8 строку
|
|
|
|
| Администратор
|
Пост N: 3880
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.09.19 16:14. Заголовок: 04Е8 - это символ из..
04Е8 - это символ из киргизского алфавита. Есть несколько вариантов. Можно добавить в харбор 8-ми битную кодировку с привязкой ее к unicode. Тогда строковую информацию в БД и текстах программ можно будет хранить в однобайтном формате, а харбор сам будет перекодировать где нужно строки в unicode, в том числе для word. Но для этого надо определиться, какая именно 8-ми битная кодировка используется. Варианты я давал. При этом добавление языкового модуля даст такие приятные фичи, как правильная работа функций lower/upper. Если не использовать 8-ми битную кодировку, то строки надо хранить в utf8 или utf16. Для этого в программе надо установить кодовую страницу по умолчанию UTF8EX или UTF16LE. Харбор опять таки автоматически будет перекодировать при необходимости строки в unicode Для текстов программ utf8 более-менее подходит, тот же редактор far это делать умеет. Но при этом не будет языкового модуля.
|
|
|
|
| |
Пост N: 62
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 16:21. Заголовок: Имеется текст "Э..
Имеется текст "Это символ Ө с кодом 04Е8" CP 1251, и только символ "Ө" код U+04E8 приходится вставлять текст последовательно: - сперва часть слова "Это символ " // без преобразования кодировки (1251) - далее вставить символ "Ө" // oText:Range:InsertSymbol(1186,"Times New Roman",.T.) (UniCode) - и в конце часть слова " с кодом 04Е8" // без преобразования кодировки (1251) в таком порядке корректно отображается текст.
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 16:31. Заголовок: Pasha, я о чем и спр..
Pasha, я о чем и спрашивал в начале (UTF8), 8-битная кодировка с привязкой UTF8. Можно на примере киргизского, у них только 3 дополнительные буквы к алфавиту (6 символов).
|
|
|
|
| |
Пост N: 64
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 16:37. Заголовок: 6 символов - Ө..
6 символов - Ө - U+04E8 ө - U+04E9 Ң - U+04A2 ң - U+04A3 Ү - U+04AE ү - U+04AF Порядок следования как в кириллице, после символов ...НҢ..ОӨ..УҮ... - для индексации
|
|
|
|
| Администратор
|
Пост N: 3881
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.09.19 16:37. Заголовок: Так какая 8-ми битна..
Так какая 8-ми битная кодировка у вас используется ? Windows Cyrillic Asian ParaType PT-154 ? В ней символ Ө имеет десятичный код 164, а ө - 181 остальные 2 символа надо посмотреть Ң - U+04A2 140 ң - U+04A3 156 Ү - U+04AE 135 ү - U+04AF 137 Эта кодировка имеет распространение, или какая-то другая ? Может быть есть утвержденный стандарт ?
|
|
|
|
|
| |
Пост N: 65
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 17:00. Заголовок: А черт его знает... ..
А черт его знает... надо наверно взять основу 1251 (стандартной кириллицы), для начала после символа "Я" - продолжить эти 6 символов, в дальнейшем можно определится более точные месторасположения символов На примере киргизского создать работоспособную вещь, в дальнейшем можно и подключить не только среднеазиатские языки (на основе кириллицы) к примеру башкирский имеет те же символы
|
|
|
|
| постоянный участник
|
Пост N: 2839
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 17:18. Заголовок: Новичок пишет для на..
Новичок пишет цитата: | для начала после символа "Я" - продолжить эти 6 символов, в дальнейшем можно определится более точные месторасположения символов |
| погуглил киргизкий алфавит, получил #define HB_CP_UPPER "АБВГДЕЁЖЗИЙКЛМНҢОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ" #define HB_CP_LOWER "абвгдеёжзийклмнңоөпрстуүфхцчшщъыьэюя" #define HB_CP_UPPER "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" #define HB_CP_LOWER "абвгдежзийклмнопрстуфхцчшщъыьэюя" нижние строки ru1251
|
|
|
|
| |
Пост N: 66
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 17:19. Заголовок: я имел ввиду располо..
я имел ввиду расположение в кодовой системе 8-бит
|
|
|
|
| постоянный участник
|
Пост N: 2840
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 17:25. Заголовок: Новичок пишет я имел..
Новичок пишет цитата: | я имел ввиду расположение в кодовой системе 8-бит |
| символы задаются в hb в utf8 кодировке без BOM, см. src\codepage\l_??.ch нужны еще названия месяцев и дней недели в utf8, об этом говорили, когда Pasha делал LV 1257 кодировку
|
|
|
|
| |
Пост N: 67
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 17:55. Заголовок: да пока можно постав..
да пока можно поставить русские наименования, проблем сделать отдельные функции не проблема(определения месяцев и дней недели), если будет иметь место возможность использования национальных символов. *кстати, много используется и двух- и трех- сокращенные наименования месяцев и дней недели (типа, Янв, Фев,... ПНД, ВТР, ... ПН, ВТ, ...)
|
|
|
|
| постоянный участник
|
Пост N: 2841
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 18:11. Заголовок: Опять погуглил Год ..
Опять погуглил Год у них был представлен оригинальным 12-месячным циклом: жалган куран — февраль, чын куран — март, бугу — апрель, кулжа — май, теке — июнь, баш оона — июль, аяк оона — август, тогуздун айы — сентябрь, жетинин айы — октябрь, бештин айы — ноябрь, учтун айы — декабрь и бирдин айы — январь. язык понедельник вторник среда четверг пятница суббота воскресенье Киргизский дүйшөмбү шейшемби шаршемби бейшемби жума ишемби жекшемби
|
|
|
|
| постоянный участник
|
Пост N: 2842
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 18:14. Заголовок: PS Осталось определи..
PS Осталось определиться. Pasha пишет цитата: | Windows Cyrillic Asian ParaType PT-154 ? |
| клавиатура как ?
|
|
|
|
| |
Пост N: 68
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 18:36. Заголовок: *да и вообще, на дво..
*да и вообще, на дворе 21 век, век "знакомест", пора бы уже объединенные символы недель, месяцев в виде знаков. Знаки - международный понятный язык, к примеру дорожные знаки. Сделать к примеру, порядковый номер недели в круглых рамках, выходные в инверсии к примеру. Дни недели ① ② ③ ④ ⑤ ➏ ➐ Месяцы Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ, Ⅵ, Ⅶ, Ⅷ, Ⅸ, Ⅹ, Ⅺ, Ⅻ или ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ну короче тип того *Ну вообщем понимаете, без UNICODE в дальнейшем не обойтись (не только национальные языки!)
|
|
|
|
| |
Пост N: 69
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 18:38. Заголовок: Клава, посмотрел, дл..
Клава, посмотрел, для UTF8 используется для киргизского - правый Alt Gr + (Уу Нн Оо) соответственно
|
|
|
|
| Администратор
|
Пост N: 3882
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.09.19 19:37. Заголовок: создаем исходник в к..
создаем исходник в кодировке utf8: proc main local oWord, oText REQUEST HB_CODEPAGE_UTF8, HB_CODEPAGE_UTF8EX hb_cdpSelect( "UTF8EX" ) oWord := win_oleCreateObject( "Word.Application" ) oWord:Documents:Add() oText := oWord:Selection() oText:InsertAfter("АБВГДЕЁЖЗИЙКЛМНҢОӨПРСТУҮФХЦЧШЩЪЫЬЭЮЯ") oWord:Visible := .t. retu собираем, запускаем, видим в word то, что надо, весь алфавит
|
|
|
|
|
| постоянный участник
|
Пост N: 2843
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 20:02. Заголовок: SergKis пишет aSim :..
SergKis пишет цитата: | aSim := {{utf8(1251), utf8(нац. символ), ... } и по идее cValue := hb_StrToUtf8(cValue) AEval(aSim, {|as|, cValue := StrTran(cValue, as[1], as[2]) }) |
| hb_cdpSelect( "RU1251" ) aSim := {{hb_strtoutf8(chr(161)), } /* H */,hb_strtoutf8(chr(162)), } /* h */, ...} hb_cdpSelect( "UTF8EX" ) // если prg файл не utf8 можно прочитать с файла или ресурсов в utf8 все буквы перекодировки aSim[ 1 ][2] := "Ң" aSim[ 2 ][2] := "ң" ... hb_cdpSelect( "RU1251" ) cVal := hb_strtoutf8(cVal) AEval(aSim, {|as| cVal := StrTran(as[1], as[2]) }) отправив в word cVal, тоже должно быть ok
|
|
|
|
| |
Пост N: 70
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 21:24. Заголовок: нашел другой вариант..
нашел другой вариант вставить символ Юникод, более лучший oWord := win_oleCreateObject( "Word.Application" ) oWord:Documents:Add() oActive := oWord:ActiveDocument() oMarks := oActive:BookMarks oText := oWord:Selection() oText:TypeText("04af") // код юникода - 04af oText:ToggleCharacterCode() // перевод кода "04af" на юникод в связке с TypeText
|
|
|
|
| |
Пост N: 71
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 21:28. Заголовок: Более лучший вариант..
Более лучший вариант вставки Юникод: oWord := win_oleCreateObject( "Word.Application" ) oWord:Documents:Add() oActive := oWord:ActiveDocument() oMarks := oActive:BookMarks oText := oWord:Selection() oText:TypeText("04af") // указать код символа Юникода oText:ToggleCharacterCode() // Перевод на символ Юникод согласно TypeText("04af") // вместо oText:Content:InsertAfter:Text:=oText:Range:InsertSymbol(1199,"Times New Roman",.T.)
|
|
|
|
| |
Пост N: 72
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 21:53. Заголовок: Класс, попробовал ва..
Класс, попробовал вариант Pasha (попроще), сработало только еще пришлось данный prg-файл перекодировать на UTF8 (открыл через Visual Studio Code, можно к примеру и на Notepad++) Вариант SergKis - более подходит - если в этом духе перевести чтобы Юникод на контролах светилась Получилось потому что подключили UTF8EX REQUEST HB_CODEPAGE_UTF8,HB_CODEPAGE_UTF8EX hb_cdpSelect( "UTF8EX" ) без UTF8EX не получалось... Вопрос 1) и почему при простых REQUEST HB_CODEPAGE_UTF8 hb_cdpSelect( "UTF8" ) не срабатывает ? 2) Обязательно подключать обе REQUEST HB_CODEPAGE_UTF8 REQUEST HB_CODEPAGE_UTF8EX ?
|
|
|
|
| |
Пост N: 73
Зарегистрирован: 22.04.15
|
|
Отправлено: 10.09.19 22:44. Заголовок: так как, уже prg-фай..
так как, уже prg-файл в кодировке UTF8, то внутренние сообщения к примеру MsgInfo(cInfo), ... перекинул через cInfo:='текст сообщения' cInfo:=hb_translate(cInfo,'UTF8','RU1251') MsgInfo(cInfo) а то вываливались кракозябры (контролы не поддерживают UTF8) *на всякий случай напомнил кому еще понадобится
|
|
|
|
| постоянный участник
|
Пост N: 2844
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.09.19 23:39. Заголовок: Новичок пишет Вариан..
Новичок пишет цитата: | Вариант SergKis - более подходит - если в этом духе перевести чтобы Юникод на контролах светилась |
| Этот вариант для того, что бы ничего не менять в программе (базы 866, cdp 1251). Надо сделать файл utf8 (без bom) в две строки из 6 символов 1 - ru1251 кодировка 2 - нац. кодировка этот файл поместить в ресурсы и при старте, создавать массив соответствия букв aSim (как выше) из него. Для word, excel делать перекодировку символов, т.е. requstы не нужны
|
|
|
|
| постоянный участник
|
Пост N: 6431
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.09.19 01:41. Заголовок: Новичок пишет: откр..
|
|
|
|
| Администратор
|
Пост N: 3883
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.09.19 07:51. Заголовок: SergKis пишет: Этот..
SergKis пишет: цитата: | Этот вариант для того, что бы ничего не менять в программе (базы 866, cdp 1251). Надо сделать файл utf8 (без bom) в две строки из 6 символов |
| Пока в харборе нет киргизской кодировки, функция hb_strtoutf8 не будет работать на трех дополнительных буквах. Их же нет в ru1251, и правила перекодировки нет.
|
|
|
|
| постоянный участник
|
Пост N: 2846
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 08:45. Заголовок: Pasha пишет Пока в х..
Pasha пишет цитата: | Пока в харборе нет киргизской кодировки, функция hb_strtoutf8 не будет работать на трех дополнительных буквах. Их же нет в ru1251, и правила перекодировки нет. |
| В программе мы ничего не перекодируем. В файле utf8 в первой строке (можем получить программно hb_strtoutf8(chr(161)), } /* H */,hb_strtoutf8(chr(162)), } /* h */, ...) во вторую строку, проще, взять сайт с киргизским языком и перенести редактором (или программно как выше) Это делаем один раз и при сборке помещаем этот файл (без бом проще) в ресурсы При старте читаем из ресурса в строку (нет перекодировок), можно и из внешнего файла hb_memoread() Создаем aTx := hb_aTokens(cFromRes, CRLF) и из 2х строчного массива делаем aSim как было выше, там где надо делаем cVal := hb_StrToUtf8(cVal) // cdp 1251 -> Utf8 AEval(aSim, {|as| cVal := StrTran(cVal, as[1], as[2]) }) нигде нет перекодировок, символы взяты как есть
|
|
|
|
| постоянный участник
|
Пост N: 2847
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.09.19 09:29. Заголовок: PS главное использов..
PS главное использовать при формировании aSim hb_Utf8Substr() для выделения символов из строк, а не Substr()
|
|
|
Ответов - 31
, стр:
1
2
All
[только новые]
|
|