SET CHARSET TO ansi

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

SET CHARSET TO ansi

Beitrag von AUGE_OHR »

hi,

ich muss das Thema nochmals aufgreifen.

Code: Alles auswählen

PROCDURE MAIN
USE ARTIKEL
BROWSE()
RETURN
wäre VIO/Hybrid wo ja keine Konvertierung statt findet, aber es wird ein Alaska CRT Font verwendet.

wenn meine DBF (DBFNTX) OEM ist und ich /PM:PM verwende wird ja alles nach ANSI konvertiert.

wenn ich nun SET CHARSET TO ansi verwende, "sollte" der Mechanismus abgestellt sein d.h. es findet keine Konvertierung statt ?

Code: Alles auswählen

PROCDURE MAIN
SET CHARSET TO ansi
USE ARTIKEL
XbpBROWSE()
RETURN
der "Unterschied" wäre ja jetzt "nur" der Font, oder ?

da es hier "noch" nicht um die Sortierung geht kann man doch COLLATION etc. hier mal vernachlässigen ... oder ... > 128 ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SET CHARSET TO ansi

Beitrag von brandelh »

Hallo Jimmy,

in der Hilfe ist das ziemlich gut beschrieben mit 2 Schaubildern.
Deine Aussagen stimmen nicht ganz.

1. DBFDBE / NTXDBE - immer ASCII egal welche Einstellung im Programm
2. FOXDBE mit CDXDBE - hier kommt es darauf an, wie die Einstellung beim dbcreate() war !
eine FOX Datendatei in ASCII wird immer ASCII speichern etc.
3. Alle Betriebssystemzugriffe brauchen ANSI - und müssen bei OEM per Hand konvertiert werden.
4. Einige Zeichen verschwinden bei der Konvertierung ...
5. Wenn das Programm und die DBF unterschiedlich sind wird automatisch konvertiert,
sonst nicht. Mit dem BS wird nie automatisch konvertiert -> file(), directory() etc.

Ich nutze in neuen GUI Programmen immer ANSI, alte Hybrid Programme brauchen aber OEM !
Als Datenspeicher nutze ich immer noch gerne DBFNTX, egal was die Oberfläche hat.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SET CHARSET TO ansi

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben:Ich nutze in neuen GUI Programmen immer ANSI, alte Hybrid Programme brauchen aber OEM !
und genau das ist das Haupt Problem ... Cl*pper DBF = OEM ... und davon gibt es viele ...

Ich habe bislang immer versucht, unter GUI, mit "kompatiblen" DBF (DBFNTX oder COMIX) zu
arbeiten da es immer eine "Übergangszeit" braucht bis von der "vorhandenen" Lösung auf die
neue umgestellt wird. Dabei wird meisten parallel mit beiden Version gearbeitet und das geht
ja nur mit OEM (+Cli*pper).

Ich bekomme es unter Xbase++ GUI, mit ArialUNI, ja alles hin, aber wenn ich z.b. die Daten
dann an Excel übergebe wird trotz selben Font in Excel es nicht richtig dargestellt (Codepage)

dies triff jeweils für beide OS() zu das jeweils die "Fremdsprache" dann "falsch" an Excel geht,
wobei es ja dann Excel ist was nicht "merkt" das ich eine andere Codepage haben möchte.

was nun /go und meinen OEM Editor angeht "denke" ich das ich das wohl "global" ändern muss
und sowass grundsätzlich als Resource (oder in einer ANSI DBF ) halten sollte und nicht mehr
im Source "hardcode" ... Thema CDOW() und chinesisches OS()

aber noch mal zurück zu meiner 2nd Frage :

Der Alaska CRT Font zeigt ja, in der CMD / DOS Box, immer "richtig" ASCII an.
Windows Fonts sind alle(?) ANSI, deshalb werden ASCII Zeichen nicht immer richtig dargestellt?

nun gibt es ja ConvToAnsiCP() womit man OEM konvertieren könnte ... aber wenn die OEM von
einem anderen OS() kommt (chinesisch/deutsch) dann funktioniert ConvToAnsiCP() nicht, weil
es von einer "falschen" OEM Tabelle ausgeht.
Wie Excel wird die "System" Codepage verwendet und das funktioniert nicht.

beleibt wohl nur das ich in der DBF die Umlaute in "ae", "oe", "ue" abspeiche und je nach OS()
ent-/verschlüssel. das kann noch recht lustig werden, den man sagte mit das man sehr wohl
ein SEEK mit chinesischen Zeichen machen könnte ... keine Ahnung wie die "Sortierung" aussehen könnte ...
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: SET CHARSET TO ansi

Beitrag von brandelh »

Hi,

soweit ich mich erinnere nutzt DBFNTX immer die Codepage 850 oder war das nur in der deutschen so ... :?

Aber immer basiert der OEM Zeichensatz auf dem 7 Bit OEM (der ja immer gleich ist) und somit auf den normalen
westlichen Schriftzeichen. GIBT es überhaupt einen OEM Zeichensatz für chinesisch ?
Wurde nicht deshalb von OEM auf ANSI umgestellt, um solche Schriften auch zu unterstützen und dann auf UTF-16
weil auch ANSI nicht gut funktioniert ?

Tatsache ist aber auch, dass ich mich - wie die meisten hier - nur in unserem Sprachraum bewege und daher nicht genug über dein Problem weiß. Liefen chinesische und japanische Rechner nicht auf englisch weil es zu DOS (OEM) Zeiten gar
nicht möglich war die "vollig andere Art" zu integrieren.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SET CHARSET TO ansi

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Liefen chinesische und japanische Rechner nicht auf englisch weil es zu DOS (OEM) Zeiten gar nicht möglich war die "völlig andere Art" zu integrieren.
DAS ist auch der Grund warum es 3 Windows Version gibt : chinesisch, japanisch und "den Rest der Welt"
Der Unterschied liegt im Alphabet ... so was gibt es ja bei "Bildsprachen" nicht.

mit den chinesischen "System" Font komme ich bei Excel mit CHR(i) auch nicht weiter ... > 128 ist nichts.
also doch wieder zurück zu Unicode ... und evtl. die ArialUNI.TTF "patchen" damit er eine andere Codepage benutzt ...
gruss by OHR
Jimmy
Günter Beyes
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 315
Registriert: Mo, 16. Okt 2006 13:04
Wohnort: Region Stuttgart

Re: SET CHARSET TO ansi

Beitrag von Günter Beyes »

Hi Jimmy,

Hmm.
ArialUNI.TTF "patchen" damit er eine andere Codepage benutzt
ArialUNI.TTF beinhaltet vermutlich alle Codepages, und auf jeden Fall auch Zeichen von Sprachen, die keiner Codepage zugeordnet sind wie z.B. Hindi.
Unicode-Beispiel UTF-16.PNG
Unicode-Beispiel UTF-16.PNG (8.46 KiB) 4136 mal betrachtet
Was IMHO fehlt, ist "set charset to unicode".

Gruß,
Günter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SET CHARSET TO ansi

Beitrag von AUGE_OHR »

Günter Beyes hat geschrieben:Was IMHO fehlt, ist "set charset to unicode".
JA genau ... !!!
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: SET CHARSET TO ansi

Beitrag von AUGE_OHR »

würde das gehen :-k

erweitert um Threads
Die SET CHARSET Einstellung hat Thread-lokale Gültigkeit, d.h. Zeichenketten können im Speicher gemäß der Einstellung des aktuellen Threads manipuliert werden

Code: Alles auswählen

STATIC aExcel := {} // Fieldwide Static
STATIC isRunning := .F.

PROCEDURE MAIN
LOCAL oThread1 := Thread():new() 
LOCAL oThread2 := Thread():new() 
 
   oThread1:start( "Do_OEM" ) 
   SLEEP(100*3)
   DO WHILE isRunning
       SLEEP(0)
   ENDDO
   oThread2:start( "Do_ANSI" ) 
   SLEEP(100*3)
   DO WHILE isRunning
       SLEEP(0)
   ENDDO

   DoMyExcel(aExcel)

RETURN

PROCEDURE Do_OEM
isRunning := .T.
SET CHARSET TO OEM
USE MyOEM
DO WHILE !EOF()
     AADD(aExcel,{OemString})
     SKIP
ENDDO
CLOSE
isRunning := .F.
RETURN

PROCEDURE Do_ANSI
isRunning := .T.
SET CHARSET TO ansi
USE MyANSI
DO WHILE !EOF()
     AADD(aExcel,{AnsiString})
     SKIP
ENDDO
CLOSE
isRunning := .F.
RETURN
klar mit entsprechenden DBE setting ... :-"
gruss by OHR
Jimmy
Antworten