Programmierung

Zeichensatzkonvertierung mit Hilfe des Memory-Objekts

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('äöüÄÖÜß');
Keine Kommentare

Kommentar abgeben