
Prekódovanie DBF súboru v ANSI (Latin II Slovensky) do UTF Unicode
Prosím Vás o pomoc pri riešeńí tohto problému :
Potrebujem prekódovať databázy naplnené, do UNICODE.
Preklápam totiž programy v XBASE (CA Clipper 5.3) ktoré využívajú DBF súbory kompatibilita FoxPro) do Win aplikácie , generovanej pomocou HMG32 kompilátor.
Po prekompilovaní sa texty v databáze zobrazujú s chybnou diakritikou.
(programy v Clippri sa mi nechce nanovo programovať, lebo obsahujú kopec funkcií ako vlastné zipery, utility v Céčku, a podobne low level funkcie obsluhujúce periférie)
Skúšal som rôzne free aj trial prekodéry dbf, ale bez úspechu, aj s rôznym východiskovým stavom DBF súboru.
Neviem teraz isto, či je problém v prekodéroch, alebo HMG kompilátor síce môže podporovať Unicode, ale neobsahuje SK znakovú sadu.
v knižnici HMG kompilátora je niečo takéto ako nižšie.
Pomohol by mi ukážkový zdrojový kód, ako prekódujem jedno textové políčko z Ansi do Unicode, lebo nerozumiem tomu rozdielu v zápisoch v bytoch, ktoré je u Unicode iné. resp. či vôbec DBF umožňuje zápis v Unicode ? Ako sú tam potom tie slová uvedené, že to browser zobrazuje správne.
Alebo funkčný prekodér do Unicode (jeden český som našiel ale nemá Sk znaky)
Ďakujem všetkým za akúkoľvek radu.
#translate SET LANGUAGE TO SPANISH => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_ES ; HB_LANGSELECT( "ES" ) ; InitMessages("ES")
#translate SET LANGUAGE TO ENGLISH => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_EN ; HB_LANGSELECT( "EN" ) ; InitMessages("EN")
#translate SET LANGUAGE TO FRENCH => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_FR ; HB_LANGSELECT( "FR" ) ; InitMessages("FR")
#translate SET LANGUAGE TO PORTUGUESE => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_PT ; HB_LANGSELECT( "PT" ) ; InitMessages("PT")
#translate SET LANGUAGE TO GERMAN => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_DEWIN ; HB_LANGSELECT( "DEWIN" ) ; InitMessages("DE")
#translate SET LANGUAGE TO RUSSIAN => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_RUWIN ; HB_LANGSELECT( "RUWIN" ) ; InitMessages("RU")
#translate SET LANGUAGE TO ITALIAN => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_IT ; HB_LANGSELECT( "IT" ) ; InitMessages("IT")
#translate SET LANGUAGE TO POLISH => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_PLWIN ; HB_LANGSELECT( "PLWIN" ) ; InitMessages("PL")
#translate SET LANGUAGE TO BASQUE => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_EU ; HB_LANGSELECT( "EU" ) ; InitMessages("EU")
#translate SET LANGUAGE TO CROATIAN => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_HR852 ; HB_LANGSELECT( "HR852" ) ; InitMessages("HR")
#translate SET LANGUAGE TO SLOVENIAN => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_SLWIN ; HB_LANGSELECT( "SLWIN" ) ; InitMessages("SL")
#translate SET LANGUAGE TO CZECH => _HMG_SYSDATA \[ 211 \] := ' ' ; REQUEST HB_LANG_CSWIN ; HB_LANGSELECT( "CSWIN" ) ; InitMessages("CS")
// Languages Not Supported by hb_LangSelect()
#translate SET LANGUAGE TO FINNISH => _HMG_SYSDATA \[ 211 \] := ' ' ; ; InitMessages("FI")
#translate SET LANGUAGE TO DUTCH => _HMG_SYSDATA \[ 211 \] := ' ' ; ; InitMessages("NL")
#translate SET CODEPAGE TO ENGLISH => hb_setcodepage("EN")
#translate SET CODEPAGE TO SPANISH => REQUEST HB_CODEPAGE_ESWIN ; hb_setcodepage("ESWIN")
#translate SET CODEPAGE TO BULGARIAN => REQUEST HB_CODEPAGE_BGWIN ; hb_setcodepage("BGWIN")
#translate SET CODEPAGE TO GERMAN => REQUEST HB_CODEPAGE_DEWIN ; hb_setcodepage("DEWIN")
#translate SET CODEPAGE TO GREEK => REQUEST HB_CODEPAGE_ELWIN ; hb_setcodepage("ELWIN")
#translate SET CODEPAGE TO HUNGARIAN => REQUEST HB_CODEPAGE_HUWIN ; hb_setcodepage("HUWIN")
#translate SET CODEPAGE TO POLISH => REQUEST HB_CODEPAGE_PLWIN ; hb_setcodepage("PLWIN")
#translate SET CODEPAGE TO PORTUGUESE => REQUEST HB_CODEPAGE_PT850 ; hb_setcodepage("PT850")
#translate SET CODEPAGE TO RUSSIAN => REQUEST HB_CODEPAGE_RU1251 ; hb_setcodepage("RU1251")
#translate SET CODEPAGE TO SERBIAN => REQUEST HB_CODEPAGE_SRWIN ; hb_setcodepage("SRWIN")
#translate SET CODEPAGE TO SLOVENIAN => REQUEST HB_CODEPAGE_SLWIN ; hb_setcodepage("SLWIN")
#translate SET CODEPAGE TO UNICODE => SET (_SET_CODEPAGE, "UTF8")
// #translate SET CODEPAGE TO UNICODE => REQUEST HB_CODEPAGE_UTF8 ; hb_setcodepage("UTF8")
DBF jako takové UNICODE podle mého názoru neumělo a neumí. Tam se ukládaly jednobajtové znaky a v hlavičce byla zapsána kódová stránka. Nejsem si jistý ani tím UTF-8, protože řetězec je definovaný např, jako String(30) a v UTF-8 do něj zapíšeš např. pouze 20 znaků, zbytek sežere znak s diakritikou, přek´dovaný do UTF-8.
Zkoušel jsi použít kódování CZECH? To obsahuje všechny znaky, které potřebuješ. V minulosti se CZECH a SLOVAK nerozlišovalo.
touchwood: skúšal som to, ale DBF sa dá v exceli otvoriť a uložiť do Unicode len ako TXT súbor, a to sa mi stratí formátovanie, definovanie polí a pod.
Jan Fiala:
tomu práve nerozumiem, lebo potom by som musel definovať character s rezervou na počet znakou s diakritikou a ošetriť zadávacie pole aby sa nedalo zadať viac znakov ako potrebné pre uloženie
skúšal som aj parameter CZECH v HMG, ale nezobrazuje dobre žiadny znak s diakritikou
skúšal som tiež online UTF 8 konvertor a nahadzovať skonvertované znaky do Foxpro a potoom ich zobraziť browserom kompilovaným do toho Win (HMG kompiler z CA Clippra) ale nieje to dobre, náhodou sa trafil do Š, ale napr. Č už bolo zle.
Ešte je tu jedna vec, že browser mám zatiať v "DOS" okne, resp. je to už WIn ale tvári sa ako DOS browser,
v prílohe je len ukážkový program, riešim iný soft.
A umí vůbec to "DOS" okno ty znaky zobrazit?
Mám program, ktorý je napísaný v CA Clipper, ten otvára zoznamy priamo cez Browse, teda zobrazí údaje v okne. DIakritika je v Latin II.
Funguje to pod DOSom, aj pod takmer všetkými WIndowsami, teda W95, 98,XP,W7, na Viste je problém nejaký systémový, a tiež na W8 som to neskúšal.
Teda všade sa zobrazí okno so správnou diakritikou.
Keď to prekompilujem do Windows pomocou HMG kompileru, program ostane vzhľadovo rovnaký, v podstate až na hlavičku main programu ostáva komplet zdroják rovnaký, bez akýchkoľvek zmien, po spustení tohoto programu všetko vyzerá ako predtým, iba je to Win kód. Vzhľad "DOS" browsera sa potom dá zameniť za normálne Win okno, doplniť listboxy, atĎ všetko čo majú Win aplikácie, podpora myši,... ale to už treba preprogramovať. Toto som zatiaľ neupravoval.
Je možné, že ten browser generovaný HMG kompilerom nerozpozná windows už ako DOS okno, a teda nezapne podporu SK diakritiky. Možno.