Автор | Сообщение |
|
| |
Пост N: 6324
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.03.17 18:14. Заголовок: [?] Hb_oemtoansi
REQUEST HB_LANG_RU866 HB_LANGSELECT("RU866") REQUEST HB_CODEPAGE_RU866 hb_cdpSelect( "RU866" ) ? hb_ansitooem(hb_oemtoansi('■')) ? hb_ansitooem(hb_oemtoansi('Ж')) В первом случае я не получаю символ с десятичным кодом 254 , получаю не понятно что. Почему так ?
|
|
|
Ответов - 16
[только новые]
|
|
|
| постоянный участник
|
Пост N: 5324
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.03.17 23:01. Заголовок: Dima пишет: В перво..
Dima пишет: цитата: | В первом случае я не получаю символ с десятичным кодом 254 , получаю не понятно что. Почему так ? |
| А в какой кодировке исходник программы ?
|
|
|
|
| |
Пост N: 6325
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 10:24. Заголовок: Andrey пишет: А в к..
Andrey пишет: цитата: | А в какой кодировке исходник программы ? |
| 866
|
|
|
|
| постоянный участник
|
Пост N: 5325
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.03.17 12:06. Заголовок: Dima пишет: 866 Зн..
Dima пишет: Значит что то в этих функциях как то по особенному сделано... Нужно лезть в исходники, разбираться.
|
|
|
|
| |
Пост N: 6326
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 14:35. Заголовок: Far Manager по ходу ..
Far Manager по ходу корректно отрабатывает в этой ситуации. Хотел было перевести базы и сырцы с 866 на 1251 с помощью hb_oemtoansi() но чую что поймаю кучу косяков.
|
|
|
|
| Администратор
|
Пост N: 3536
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.17 15:45. Заголовок: исходники hb_oemtoan..
исходники hb_oemtoansi и hb_ansitooem ничего не скажут, поскольку это только оболочка для вызова соответствующих функций winapi. Простой тест: Function OA Local c1 := '' Local c2 := '' Local c3 := '' Local c4 := '' Local c5 := '' Local c6 := '' Local i Local cCr := Chr(13)+Chr(10) for i := 128 to 255 c1 += Chr(i) c2 += hb_oemtoansi(Chr(i)) c3 += hb_ansitooem(hb_oemtoansi(Chr(i))) c4 += if(Chr(i)==hb_ansitooem(hb_oemtoansi(Chr(i))),'+','-') c5 += hb_oemtoansi(hb_ansitooem(Chr(i))) c6 += if(Chr(i)==hb_oemtoansi(hb_ansitooem(Chr(i))),'+','-') next memowrit('result.txt', c1+cCR+c2+cCR+c3+cCR+c4+cCR+c5+cCR+c6+cCR) Return nil показывает, что для спецсимволов преобразования hb_oemtoansi(hb_ansitooem()) неэквивалентны. Речь идет о спецсимволах, вроде chr(254). В принципе ни исходники программы, ни БД не должны содержать таких спецсимволов. Но, тем не менее, они могут быть. В исходниках это, к примеру, псевдографика, в базах - двоичные поля. Двоичные поля вообще перекодировать не надо, а псевдографики в кодировке ansi нет как таковой. Могут быть еще другие случаи. Для них вместо hb_oemtoansi и hb_ansitooem можно использовать функцию hb_translate между кодировками RU866 и RU1251. Но эта функция будет глючить для специфических украинских символов, из-за особенности их представления в cp866. Хотя она должна отрабатывать примерно как Far.
|
|
|
|
| |
Пост N: 6327
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 15:52. Заголовок: Pasha пишет: ни БД ..
Pasha пишет: цитата: | ни БД не должны содержать таких спецсимволов |
| Да есть любители вставлять в название контрагента кубики и прочее )) Pasha пишет: цитата: | можно использовать функцию hb_translate между кодировками RU866 и RU1251 |
| Попробую , спасибо ! Pasha пишет: цитата: | Но эта функция будет глючить для специфических украинских символов |
| укры и тут поднасрали
|
|
|
|
| |
Пост N: 6328
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 16:21. Заголовок: Попробовал , тоже гл..
Попробовал , тоже глючит ? hb_translate(hb_translate('■',"CP866","CP1251"),"CP1251","CP866")
|
|
|
|
| Администратор
|
Пост N: 3537
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.17 16:45. Заголовок: Я использую пару фун..
|
|
|
|
| |
Пост N: 6329
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 16:57. Заголовок: Pasha Не хватает фу..
Pasha Не хватает функции IsCharacter
|
|
|
|
| Администратор
|
Пост N: 3538
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.17 17:11. Заголовок: Можно заменить на Va..
Можно заменить на ValType(cVar) == "C"
|
|
|
|
| |
Пост N: 6330
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 17:18. Заголовок: Pasha ОК или на HB_..
Pasha ОК или на HB_ISSTRING
|
|
|
|
|
| |
Пост N: 6331
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 17:23. Заголовок: а сырец _dw.prg я та..
а сырец _dw.prg я так понимаю в кодировке 866 ?
|
|
|
|
| Администратор
|
Пост N: 3539
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.03.17 17:42. Заголовок: да..
да
|
|
|
|
| |
Пост N: 6332
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 17:46. Заголовок: Спасибо Паш :sm36: ..
Спасибо Паш
|
|
|
|
| |
Пост N: 6333
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 22:30. Заголовок: Что то я тогда одну ..
Что то я тогда одну вещь не пойму. Есть сырец в кодировке 866 , база тоже в ней. Создаю объект Excel , и заполняю таблицу Excel данными из базы DBF , при этом не делая ни какой перекодировки. Данные в Excel отображаются корректно , включая и символ с кодом 254 , но ведь кодировка в Excel точно не 866 а 1251. В ранних версиях Harbour если не ошибаюсь нужно было перекодировать с помощью Hb_oemtoansi , в поздних уже нет. Не пойму каким волшебным образом символ с кодом 254 корректно показывается в Excel. Возможно существует некая функция по перекодировке а я про нее не знаю.
|
|
|
|
| Администратор
|
Пост N: 3540
Зарегистрирован: 23.05.05
|
|
Отправлено: 13.03.17 08:10. Заголовок: Теперь уже "игра..
Теперь уже "играет" уникодность харбора. Строка из cp866 преобразовывается в utf16, и в этой кодировке ее и получает Excel.
|
|
|
|