On-line: PSP, Haz, tnsr2, гостей 2. Всего: 5 [подробнее..]
АвторСообщение
администратор




Пост 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 , получаю не понятно что.
Почему так ?

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


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




Пост N: 5324
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 11.03.17 23:01. Заголовок: Dima пишет: В перво..


Dima пишет:

 цитата:
В первом случае я не получаю символ с десятичным кодом 254 , получаю не понятно что.
Почему так ?



А в какой кодировке исходник программы ?

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




Пост N: 6325
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 10:24. Заголовок: Andrey пишет: А в к..


Andrey пишет:

 цитата:
А в какой кодировке исходник программы ?


866

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5325
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.03.17 12:06. Заголовок: Dima пишет: 866 Зн..


Dima пишет:

 цитата:
866


Значит что то в этих функциях как то по особенному сделано...
Нужно лезть в исходники, разбираться.

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




Пост N: 6326
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 14:35. Заголовок: Far Manager по ходу ..


Far Manager по ходу корректно отрабатывает в этой ситуации.
Хотел было перевести базы и сырцы с 866 на 1251 с помощью hb_oemtoansi() но чую что
поймаю кучу косяков.

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




Пост 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.

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




Пост N: 6327
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 15:52. Заголовок: Pasha пишет: ни БД ..


Pasha пишет:

 цитата:
ни БД не должны содержать таких спецсимволов


Да есть любители вставлять в название контрагента кубики и прочее ))

Pasha пишет:

 цитата:
можно использовать функцию hb_translate между кодировками RU866 и RU1251


Попробую , спасибо !

Pasha пишет:

 цитата:
Но эта функция
будет глючить для специфических украинских символов


укры и тут поднасрали


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




Пост N: 6328
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 16:21. Заголовок: Попробовал , тоже гл..


Попробовал , тоже глючит
? hb_translate(hb_translate('■',"CP866","CP1251"),"CP1251","CP866")

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




Пост N: 3537
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.17 16:45. Заголовок: Я использую пару фун..


Я использую пару функций: DosToWin и WinToDos, которые не трогают спецсимволы:

https://cloud.mail.ru/public/1TzD/uZwMTr9ES

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




Пост N: 6329
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 16:57. Заголовок: Pasha Не хватает фу..


Pasha
Не хватает функции IsCharacter

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




Пост N: 3538
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.17 17:11. Заголовок: Можно заменить на Va..


Можно заменить на
ValType(cVar) == "C"

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




Пост N: 6330
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 17:18. Заголовок: Pasha ОК или на HB_..


Pasha
ОК
или на HB_ISSTRING

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




Пост N: 6331
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 17:23. Заголовок: а сырец _dw.prg я та..


а сырец _dw.prg я так понимаю в кодировке 866 ?

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




Пост N: 3539
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.03.17 17:42. Заголовок: да..


да

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




Пост N: 6332
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 17:46. Заголовок: Спасибо Паш :sm36: ..


Спасибо Паш

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




Пост N: 6333
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.17 22:30. Заголовок: Что то я тогда одну ..


Что то я тогда одну вещь не пойму.
Есть сырец в кодировке 866 , база тоже в ней.
Создаю объект Excel , и заполняю таблицу Excel данными из базы DBF , при этом не делая ни какой перекодировки.
Данные в Excel отображаются корректно , включая и символ с кодом 254 , но ведь кодировка в Excel точно не 866 а 1251.
В ранних версиях Harbour если не ошибаюсь нужно было перекодировать с помощью Hb_oemtoansi , в поздних
уже нет.
Не пойму каким волшебным образом символ с кодом 254 корректно показывается в Excel.
Возможно существует некая функция по перекодировке а я про нее не знаю.

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




Пост N: 3540
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 13.03.17 08:10. Заголовок: Теперь уже "игра..


Теперь уже "играет" уникодность харбора. Строка из cp866 преобразовывается в utf16, и в этой кодировке ее и получает Excel.

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

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