On-line: Andrey, PSP, SergKis, гостей 1. Всего: 4 [подробнее..]
АвторСообщение



Пост N: 66
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 10.01.13 00:38. Заголовок: перекодирока dbf в 866 кодовую страницу


В dbf базе украинский текст набран с помощью утилиты keyrus. Какая это кодовая страница - не знаю. Если данные из этой базы перенести в другую dbf базу, которая использует 866 кодовую страницу, то в новой базе эти данные не читабельны. Как средствами clipper5 преобразовать данные в 866 кодовую страницу, а если это невозможно, то какой сторонней утилитой можно сделать данное преобразование?

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





Пост N: 43
Зарегистрирован: 28.07.10
ссылка на сообщение  Отправлено: 10.01.13 10:57. Заголовок: В утилите DBFnfvigat..


В утилите DBFnavigator есть пункт меню "Сменить кодировку" (DOS<->Win)
потом сохранить файл.

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



Пост N: 67
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 10.01.13 12:14. Заголовок: При смене кодировки ..


При смене кодировки DBFnavigatorom остается несколько символов (например "щ" перекодируется "ц"), все остальные символы перекодируются в "_"
Исходная база заполняется программой, написанной на Фокспро 2.6а и символьные данные заносятся на украинском языке с помощью утилиты keyrus.
Данные из этой базы нужно перенести в базу, созданную в визуал фокспро 7, но не полностью, а изменив в последней некоторые записи.
Скорее всего нужно перекодировать из ДОС в ДОС

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



Пост N: 26
Зарегистрирован: 07.06.08
ссылка на сообщение  Отправлено: 10.01.13 13:57. Заголовок: Пока ищете утилиту, ..


Пока ищете утилиту, напишете свою перекодировку. Нужно только составить таблицу соответствия, привожу пример перекодировки для WIN1251-> 866. По любому нужно менять код на код. Я бы не доверился утилитам. Или просто две кодовые страницы забить (найти и скопировать в программу), потом искать замену каждого символа по таблицам. Нашел сходу кодировки украинского http://porokhnyak.org/cyr/index.ru.html, посмотрите кодировку в Вашем файле dbf, по любому нужно знать исходную кодировку и кодовую страницу.
FUNC w_d(c) // && WIN1251->Dos
Local b:="АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя─┌┘┴┬└┐┼│├┤═╔╝╩╦╚╗╬║╠╣№ёЁ"
Local a:="└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙•√№¤■ -+++++++|||=+++++++|||╣╕и"
Local i
local ret
i=At(c,a)
if i>0
ret:=substr(b,i,1)
else
ret:=c
endif
RETURN ret


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




Пост N: 2650
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.01.13 14:04. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Скорее всего нужно перекодировать из ДОС в ДОС



Есть 2 украинские кодировки: ms (866) и украинский ГОСТ 1992-го года (1125). Они отличаются только несколькими украинскими символами.

Перекодировка между ними:

Function UkrToMs(c)
// -------------------------------------------------------------
// Перекодировка УкраинаГОСТ cp1125 -> cp866
// -------------------------------------------------------------
Return CharRepl(Chr(242)+Chr(243)+Chr(244)+Chr(245)+Chr(246)+Chr(247)+Chr(248)+Chr(249), c, Chr(131)+Chr(163)+Chr(242)+Chr(243)+Chr(73)+Chr(105)+Chr(244)+Chr(245), .t.)

Function MsToUkr(c)
// -------------------------------------------------------------
// Перекодировка cp866 -> УкраинаГОСТ cp1125
// -------------------------------------------------------------
Return CharRepl(Chr(242)+Chr(243)+Chr(244)+Chr(245), c, Chr(244)+Chr(245), .t.)


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



Пост N: 68
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 11.01.13 00:27. Заголовок: a_sidorov пишет: Re..


a_sidorov пишет:

 цитата:
Return CharRepl(Chr(242)+Chr(243)+Chr(244)+Chr(245), c, Chr(244)+Chr(245), .t.)


А где взять функцию CharRepl()?
Я использую клиппер5

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




Пост N: 2651
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 11.01.13 08:58. Заголовок: Это функция из clipp..


Это функция из clipper tools

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



Пост N: 69
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 11.01.13 19:27. Заголовок: Скачал clipper tools..


Скачал clipper tools 3
Будет работать с clipper 5.01 и если да, то как подцепить?
Использую оболочку clip.exe
Батником ни одного раза не компилировал.

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 12.01.13 14:55. Заголовок: Лучше взять родной комплект Clipper Tools II/5.0


Лучше взять родной комплект Clipper Tools II/5.0,
или напишите свой аналог, что-то типа
Function CharRepl2(cSearchFor, cText, cReplace)
Local lSearchFor:=len(cSearchFor), lReplace := len(cReplace)
Local i,s1,s2
lSearchFor:=min(lSearchFor,lReplace )
for i=1 to lSearchFor
s1:=substr(cSearchFor,i,1)
s2:=substr(cReplace ,i,1)
cText:=STRTRAN(cText,s1,s2)
next i
return cText


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




Пост N: 2577
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.01.13 15:03. Заголовок: Pasha пишет: Есть 2..


Pasha пишет:

 цитата:
Есть 2 украинские кодировки: ms (866) и украинский ГОСТ 1992-го года (1125). Они отличаются только несколькими украинскими символами.


Не совсем понятно ?

В Харборе есть 3 кодировки:
Ukrainian Windows-1251 HB_CODEPAGE_UA1251 "UA1251" cpuawin.c
Ukrainian 866 HB_CODEPAGE_UA866 "UA866" cpua866.c
Ukrainian KOI-8U HB_CODEPAGE_UAKOI8 "UAKOI8" cpuakoi.c

1125 - то же самое что и "UA1251" ?

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




Пост N: 2659
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.01.13 00:11. Заголовок: Andrey пишет: В Хар..


Andrey пишет:

 цитата:
В Харборе есть 3 кодировки:



Неверно. В харборе есть 4 украинские кодировки: 866, 1125, 1251 и koi8u
1125 почти совпадает с 866-й, кроме кодов для специфических украинских символов. Это кодировка была принята в 1991 году Минэкономики еще УССР в качестве республиканского стандарта.
Свое название - cp1125, или как ее еще называют, ruscii, она получила позднее.
Поскольку тогда с кириллическими кодировками творился бардак, она отличается от 866-й, которая де-факто к 91-му году уже существовала, но microsoft ее утвердила позже.
А 1251 - это кириллическая кодировка для windows, которая появилась еще позже, в ней коды символов кириллицы отличаются от 866-й

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




Пост N: 2579
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.13 12:02. Заголовок: Pasha пишет: В харб..


Pasha пишет:

 цитата:
В харборе есть 4 украинские кодировки: 866, 1125, 1251 и koi8u



Спасибо ! Буду знать теперь.
А как идет вызов кодировки 1125 для БД ?
CODEPAGE "UA866"
CODEPAGE "UA1251"
CODEPAGE "UAKOI8"
CODEPAGE "?????"

И нужно ли в Харборе и МиниГуи описывать все используемые кодировки ?
REQUEST HB_CODEPAGE_UA866
REQUEST HB_CODEPAGE_UA1251
и т.д.

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




Пост N: 2660
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.01.13 12:22. Заголовок: Andrey пишет: CODEP..


Andrey пишет:

 цитата:
CODEPAGE "?????"



Кодировка называется UA1125. Стало быть:

HB_SETCODEPAGE('UA1125')

или

hb_cdpSelect('UA1125')

SET CODEPAGE TO .. это как я понимаю команда minigui, и в ней есть далеко не полный список возможных кодировок.
Если нужной кодировки нет, ее надо задать стандартными средствами харбора. В конце концов, это одно и то же, и применять эту команду hmg совершенно необязательно.

А описывать естественно надо используемые кодировки, а неиспользуемые - не описывать. Так советует капитан очевидность.

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




Пост N: 2581
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.01.13 13:03. Заголовок: Pasha пишет: А опис..


Pasha пишет:

 цитата:
А описывать естественно надо используемые кодировки, а неиспользуемые - не описывать. Так советует капитан очевидность.


Спасибо !

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




Пост N: 2586
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.01.13 16:02. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
то какой сторонней утилитой можно сделать данное преобразование?



Вот этой утилитой... Русский работает, остальные проверять надо...
Правда еще не доделал до конца эту прогу, но все равно её нужно тестировать...
http://files.mail.ru/349DE519487D43279426E1FF862868BF


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



Пост N: 70
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 24.01.13 21:39. Заголовок: Всем спасибо за помо..


Всем спасибо за помощь.
Использовал функцию:


 цитата:
Pasha пишет:
Function UkrToMs(c)
// -------------------------------------------------------------
// Перекодировка УкраинаГОСТ cp1125 -> cp866
// -------------------------------------------------------------
Return CharRepl(Chr(242)+Chr(243)+Chr(244)+Chr(245)+Chr(246)+Chr(247)+Chr(248)+Chr(249), c, Chr(131)+Chr(163)+Chr(242)+Chr(243)+Chr(73)+Chr(105)+Chr(244)+Chr(245), .t.)

Function MsToUkr(c)
// -------------------------------------------------------------
// Перекодировка cp866 -> УкраинаГОСТ cp1125
// -------------------------------------------------------------
Return CharRepl(Chr(242)+Chr(243)+Chr(244)+Chr(245), c, Chr(244)+Chr(245), .t.)


Но есть один нюанс. Текстовые данные визуал фокспрошной программой отображаются крякозябрами, хотя любой вьювер показывает читабельный текст. Причина - в обнулении клиппером 29 байта в заголовке файла, в котором хранится номер кодовой страницы и его надо восстановить.
Можно было погуглить и узнать номер 866 кодовой страницы, скачать редактор бинарных файлов и изменить 29 байт. Но сделал попроще: в визуал фокспро открыл базу в монопольном режиме, он предложил выбрать кодовую страницу, выбрал 866, сохранил, подбросил в фокспрошную программу и символы начали отображаться верно.


 цитата:
Andrey пишет: её нужно тестировать...


Не прошла ваша утилита тест. почему перекодировка из win1125 в СР866, а не из dos1125 в СР866
Некоторые перекодируемые символы видны как например Chr(176) в CP866

Редко использую клиппер, подскажите почему не выходит из цикла по нажатию ESC?
#include "inkey.ch"
...
do while !eof() .and. lastkey()<>K_ESC
...
enddo

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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 24.01.13 23:14. Заголовок: Потому что не читает из клавиатуры - нужен inkey()



...
do while !eof() .and. lastkey()<>K_ESC
inkey()
..
enddo
....
Function ESC_WAIT(ntime)
Local ret:=.f.,n:=0,lkey:=0
ntime:=IIF(ntime=NIL,60,ntime)
keyboard(":"); inkey()
for n=1 to 5
lkey:=INKEY(ntime)
if lkey=K_ESC
ret:=.t.
EXIT
endif
next i
return ret


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




Пост N: 2588
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.01.13 16:32. Заголовок: SergeyKorotun пишет:..


SergeyKorotun пишет:

 цитата:
Не прошла ваша утилита тест. почему перекодировка из win1125 в СР866, а не из dos1125 в СР866


Давайте базу, я сам посмотрю.

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



Пост N: 71
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 27.01.13 12:46. Заголовок: Andrey пишет: Давай..


Andrey пишет:

 цитата:
Давайте базу, я сам посмотрю.


ЮЛЎЯ
СТАНЎСЛАВ
СВЎТЛАНА
ЛЕОНЎД
МАРЎЯ
РА°СА
ВАЛЕРЎЙ
АНАТОЛЎЙ
ВЎРА
ЇВГЕНЎЙ
ЎННА
АНАСТАСЎЯ
ЮРЎЙ

Надо перекодировать:
Перекодировка Украина ГОСТ cp1125 -> cp866
242 131 Є Г
243 163 є г
244 242 Ї Є
245 243 ї є
246 73 Ў I
247 105 ў i
248 244 ° Ї
249 245 ∙ ї

Если возможно, занесите в 29 байт (по счету - 30-ый, отсчет байтов ведется с нуля) номер 866 кодовой страницы.
Если знаете, как занести номер кодовой страницы в заглавие базы из клиппер 5.01, приведите код



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



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 27.01.13 13:10. Заголовок: как занести номер кодовой страницы в заглавие базы


Похоже , вряд ли это Вам поможет.

29 байт будет сброшен при первом же изменении таблицы движком DBFNTX clipper'a 5.01
Этот движок не знает такого понятия - кодовая страница.
Вроде даже просто сократит размер заголовка DBF, подготовленной Fox'ом с указанием кодовой страницы

Спасибо: 0 
Цитата Ответить



Пост N: 72
Зарегистрирован: 30.05.11
ссылка на сообщение  Отправлено: 27.01.13 14:54. Заголовок: petr707 пишет: 29 б..


petr707 пишет:

 цитата:
29 байт будет сброшен при первом же изменении таблицы движком DBFNTX clipper'a 5.01
Этот движок не знает такого понятия - кодовая страница.
Вроде даже просто сократит размер заголовка DBF, подготовленной Fox'ом с указанием кодовой страницы


Задача заключается в следующем: взять базу визуал фокспро 7, внести в нее изменение средствами клиппера, сохранить изменения, закрыть базу и только после этого в файле изменить (не средствами DBFNTX) значение 29 байта на значение равное номеру 866 кодовой страницы и после этого подкинуть базу фокспрошой проге.
Инфа с инета: В среде FoxPro признак кодовой страницы (29-й байт) равен 0x65 для cp866 и 0xC9 для cp1251.

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

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