Die tägliche Praxis des CONZEPT 16-Support zeigt, dass es in der letzten Zeit vermehrt zu Konvertierungsanfragen von Zeichenketten zwischen unterschiedlichen Zeichensätzen kommt.
Genau für diesen Zweck lässt sich das CONZEPT 16-Memory-Objekt einsetzen.
Dabei gibt die Eigenschaft spCharset
des Memory-Objekts den Zeichensatz der im Memory-Objekt enthaltenden Daten an. Die Angabe des gewünschten Zeichensatzes sollte am besten schon vor dem Laden der Daten in das Memory-Objekt erfolgen.
Der durch die Eigenschaft spCharset
angegebene Zeichensatz wird dann immer bei Aufrufen der Funktionen MemFindStr()
, MemReadStr()
, MemWriteStr()
und MemCnv()
zur Verarbeitung der Zeichen verwendet.
So ist zum Beispiel, durch Angabe des Ursprungszeichensatz _CharsetC16_1252
, im dritten Parameter der Funktion MemWriteStr()
, des unten angegebenen Beispiels, eine Zeichensatzkonvertierung, schnell und einfach, vom internen CONZEPT 16-Zeichensatz nach UTF8 möglich.
Sub Zeichensatzkonvertierung
(
Zeichenkette : alpha(4096)
);
local
{
tMem : handle; // Memory-Objekt
tFile : handle; // File Handle
}
{
// Memory-Objekt im Hauptspeicher anlegen
tMem # MemAllocate(4096);
// gewünschten Ziel-Zeichensatz festlegen
tMem->spCharset # _CharsetUTF8;
// Zeichenkette von C16_1252 nach UTF8 konvertieren
tMem->MemWriteStr(1,Zeichenkette,_CharsetC16_1252);
// Konvertierungs Ergebnis als Datei abspeichern
tFile # FsiOpen('c:\temp\test.txt',_FsiStdWrite);
if (tFile > 0)
{
tFile->FsiWriteMem(tMem,1,tMem->splen);
tFile->FsiClose();
}
else
{
WinDialogBox(0,DbaName(_DbaAreaAlias),
'Die Datei konnte nicht gespeichert werden!', 0, 0, 0);
}
tMem->MemFree();
}
// Aufruf der Funktion mit Sonderzeichen
Zeichensatzkonvertierung('äöüÄÖÜß');