[Allegro] Vb.330, 2. revid. Aufl. : Welchen Zeichencode verwendet die Datenbank?
Bernhard Eversberg
b-eversberg at gmx.de
Mo Jan 18 09:31:19 CET 2021
Verlautbarung 330 zur allegro-Entwicklung 2021-01-07
2., revid. Aufl. 2021-01-18
-----------------------------------------
Trick 81 : Internen Code knacken
================================
Anstoß zu dieser Sache war u.a., dass man in den "Datenbank-Eigenschaften"
gerne auch sehen wollte, welchen internen Zeichencode die Datenbank
verwendet. Das wurde erreicht, es erscheint nun z.B. dies:
Konfiguration a (t/k=2/4) -- Interner Code: ASCII
bzw. statt ASCII dann ANSI (Windows) oder UTF8 (Unicode)
Das Thema ist für Standard-Anwender ohne Belang. Auch wer seit Jahr
und Tag ohne Probleme mit allegro arbeitet, kann es ignorieren.
Mehr zum Thema Codierungen: h unicode eingeben.
Wenn man in seiner Datenbank Unicode (UTF-8) verwendet, muss man in
die .cfg diese Zeile eintragen:
CU [groß geschrieben]
Dies hat u.a. zur Folge, dass die Sondervariable cs in FLEX mit dem
Wert U belegt ist. Dies kann man so nutzen:
var cs [klein geschrieben]
if "U" ...
Wenn man dagegen ASCII oder ANSI als internen Code verwendet, KANN man
zwar CD bzw. CW setzen (d.h. DOS bzw. Windows), muss man aber nicht.
Die Variable cs ist ohne solche Setzung leider immer mit D belegt, und
auch in den Exportparametern oder sonstwo gibt es kein Kriterium, mit
dem man feststellen könnte, ob intern DOS oder Windows verwendet ist.
Beim Stöbern in den Parameterdateien kann man es durchaus herauskriegen,
aber dazu braucht's gehobene Kenntnisse der Exportparameter (Kap.10!).
Es gibt zwei andere Wege:
Methode 1: Augenschein
----------------------
Wer den Editor WinVi verwendet, kann sich z.B. eine der .xld-Dateien
vornehmen und einfach mal reinschauen. Im Datentext wird man sehr
schnell irgendwelche Umlaute entdecken - oder aber sonderbare falsche
Zeichen an den betreffenden Stellen, z.B. wenn da M”ller steht statt Möller.
Man schaltet in WinVi dann einfach zwischen den drei Codes um:
Dazu dienen die drei Buttons oben rechts: Windows (=ANSI) / DOS / UTF8
Wenn z.B. bei Klick auf UTF8 die Umlaute richtig aussehen, dann ist es
Unicode UTF8. Meistens wird DOS richtig sein, denn das ist der Standard.
"Na schön", wird man sagen, "aber geht's nicht einfacher, und ohne dass
man sich einen Editor besorgen muss, den man gar nicht kennt?"
Methode 2: FLEX
---------------
Hier ist der vielleicht fast kleinstmögliche FLEX, mit dem das
geht: (geschrieben im Windows-Code (ANSI), (mit Notepad oder WinVi)
// Default:
$Code ANSI
var "ä"
ASCII
if "„" $Code ASCII
// Steht Wert CU in .cfg? (nur bei UTF)
var cs
if "U" $Code UTF8
// Ergebnis anzeigen
var "Interner Code : " $Code
mes
Man besorgt sich den aktuellen cco.flx mit X gf cco.flx
und gibt dann ein:
X cco
und - schwupp - erscheint eine Ansage wie z.B.
Interner Code : ASCII
Doch Sie werden abermals sagen "Na schön, aber könnte das nicht auch
einfach eingebaut sein in den FLEX, der alle Eigenschaften der
Datenbank anzeigt, nur eben bis jetzt nicht den Zeichencode?"
Zwei zu Null für Sie - das stimmt. Und es wurde umgesetzt:
Man besorge sich schnell mal eben die aktuelle Datei dbi.rtf:
X gf dbi.rtf
Danach: Menü "Global / Datenbank-Information", oder eingeben: h dbi
Natürlich kann man die oben abgedruckten FLEX-Zeilen in jeden eigenen FLEX
einbauen, in dem man den Zeichensatz ermitteln will. Der steht dann
also in der Variablen $code, nachdem der obige Abschnitt durch ist.
Wer's ganz genau wissen will, kann die Datei dbi.rtf inspizieren, um zu
sehen, wie die FLEX-Zeilen innerhalb des RTF-Textes aussehen. Wirklich
"einfach" ist das jedoch nicht, oder sieht nicht so aus...
Skeptiker können das korrekte Funktionieren auch mit den zwei anderen
mitgelieferten Demo-Banken testen, und zwar mit diesen zwei Aufrufen
aus dem allegro-Programmordner:
a99 mini-ans\mini
und
a99 mini-uni\dat
Dann jeweils eingeben: h dbi oder Menü "Global / Datenbank-Info"
Mehr Informationen über die Mailingliste Allegro