Форум » GUI » Изображение кодировки ДОС под Windows » Ответить

Изображение кодировки ДОС под Windows

Dr. Oldwarez: Как известно, ДОС и Винда используют разные кодировки. Поэтому при переносе базы данных из ДОС в ВИНДУ возникли косяки с диакритическими знаками. Функция HB_TRANSLATE здесь не подходит, поскольку хотелось бы, чтобы эта база могла бы использоваться и ис-под ДОСа. Как задать правильное отображение кодировки 850 элементами управления Винды (TEXTBOX), чтобы и при вводе эти диакритические знаки, введённые из-под Винды, сохранялись в ДОСе.

Ответов - 8

gfilatov2002: Dr. Oldwarez пишет: Как задать правильное отображение кодировки Харбор располагает для этого двумя полезными функциями. Ниже их описание /* $DOC$ * $TEMPLATE$ * Function * $NAME$ * HB_ANSITOOEM() * $CATEGORY$ * API * $SUBCATEGORY$ * Strings * $ONELINER$ * Convert a windows Character to a Dos based character * $SYNTAX$ * HB_ANSITOOEM( <cString> ) --> cDosString * $ARGUMENTS$ * <cString> Windows ansi string to convert to DOS oem String * $RETURNS$ * <cDosString> Dos based string * $DESCRIPTION$ * This function converts each character in <cString> to the * corresponding character in the MS-DOS (OEM) character set. The * character expression <cString> should contain characters from the * ANSI character set. If a character in <cString> doesn't have a * MS-DOS equivalent, the character is converted to a similar MS-DOS * character. * $EXAMPLES$ * ? HB_OEMTOANSI( "Harbour" ) * $STATUS$ * R * $COMPLIANCE$ * H * $PLATFORMS$ * Win * $FILES$ * Library is rtl * $SEEALSO$ * HB_OEMTOANSI() * $END$ */ /* $DOC$ * $TEMPLATE$ * Function * $NAME$ * HB_OEMTOANSI() * $CATEGORY$ * API * $SUBCATEGORY$ * Strings * $ONELINER$ * Convert a DOS(OEM) Character to a WINDOWS (ANSI) based character * $SYNTAX$ * HB_OEMTOANSI( <cString> ) --> cDosString * $ARGUMENTS$ * <cString> DOS (OEM) string to convert to WINDOWS (ANSI) String * $RETURNS$ * <cDosString> WINDOWS based string * $DESCRIPTION$ * This function converts each character in <cString> to the * corresponding character in the Windows (ANSI) character set. The * character expression <cString> should contain characters from the * OEM character set. If a character in <cString> doesn't have a ANSI * equivalent, the character is remais the same. * $EXAMPLES$ * ? HB_OEMTOANSI( "Harbour" ) * $STATUS$ * R * $COMPLIANCE$ * H * $PLATFORMS$ * Win * $FILES$ * Library is rtl * $SEEALSO$ * HB_ANSITOOEM() * $END$ */

alkresin: "Переносить", конвертировать базу данных нет нужды. Просто при открытии ее в вашей программе надо указывать кодовую страницу, в которой она сделана. Если кодовая страница приложения ( установленная hb_SetCodepage ) отличается от указанной для базы, то при чтении/записи данных будет происходит автоконвертация. Так, если мы имеем дело с русскими кодировками и в базах она, как обычно в DOS'е, 866 - то так и открывайте ее: use some_file codepage "RU866". А в начале программы должно стоять, в зависимости от окружения, hb_SetCodepage( "RU866" ) или hb_SetCodepage( "RU1251" ).

Dr. Oldwarez: Огромное вам спасибо, Александр Кресин! Я сделал так: в начале виндовой программы установка [pre2] HB_SETCODEPAGE("RU1251") // у меня немецкий, потому HB_SETCODEPAGE("DEWIN") USE DATABASE CODEPAGE "RU866" //DE850 [/pre2] Всё отлично работает! Ставлю виртуальный ящик баварского пива


Dima: Dr. Oldwarez пишет: Ставлю виртуальный ящик баварского пива На родину поедешь , захвати пару бутылок (не виртуальных)

Петр: Dr. Oldwarez пишет: HB_SETCODEPAGE("RU1251") Если вы работаете с Harbour (без x) помните, что в новых версиях hb_SetCodepage переменован в hb_cdpSelect

Andrey: Петр пишет: Если вы работаете с Harbour (без x) помните, что в новых версиях hb_SetCodepage переменован в hb_cdpSelect Ну и нафига нужно было городить такой огород в Харборе ? А под МиниГуи тоже переделывать придется исходники ?

gfilatov2002: Andrey пишет: под МиниГуи тоже переделывать придется исходники ? Нет, не надо. Это уже учтено для совместимости

Петр: Andrey пишет: Ну и нафига нужно было городить такой огород в Харборе ? HB_CDPSELECT() which does the same as HB_SETCODEPAGE(), but aligns well with function naming rules and namespace. Такие у нас правила наименования и пространства имен. А под МиниГуи тоже переделывать придется исходники ? В 100 раз - МиниГуи всего лишь GUI библиотека. Все зависит от того, какой вы компилятор будете использовать. Даже если Харбор, то вам достаточно подключить в начале программы xhb.ch. Тогда код придется править меньше или совсем не править.



полная версия страницы