Liste verfügbarer Codepages

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Liste verfügbarer Codepages

Beitrag von MitjaStachowiak »

Hallo,
wo finde ich eine Liste verfügbarer Codepages?

Habe da eine Datei, die ISO-8859-15 codiert ist. Schiebe daraus ein String aus einem Buffer:

Code: Alles auswählen

var t : RawByteString;
setLength(t, pos-valueBegin);
if (length(t) > 0) then begin
  move(buf[valueBegin], t[1], length(t));
  System.setCodePage(t, CP_NONE, false);
end;
Auf diese Weise funktioniert es, aber ich denke, dass die Codierung mit CP_NONE richtig erkannt wird, ist eher Glück...
Weiß jemand, wie ich ISO-8859-15 als Codepage explizit setzen kann? Finde dazu nirgends eine definierte Konstante.

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Liste verfügbarer Codepages

Beitrag von wp_xyz »

Wenn du den Text manuell konvertieren willst, dann findest du in der unit LConvEncoding die Konstante EncodingCPIso15, sowie die Funktionen ISO_8859_15ToUTF8() und UTF8ToISO_8859_15().

Für die FPC-interne Konvertierung brauchst du wahrscheinlich (weil nicht getestet) die Nummer 28605 (https://docs.microsoft.com/de-de/window ... dentifiers)

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Liste verfügbarer Codepages

Beitrag von Winni »

MitjaStachowiak hat geschrieben:
Mo 21. Jun 2021, 14:23
Hallo,
wo finde ich eine Liste verfügbarer Codepages?
Hi!

Sieh Dir mal die Unit LCovEncoding an und dort hauptsächlich die Zeilen ~110 bis ~160 - nur Functionen zum Endcoden. Auch für Araber, Türken, Griechen, Israelis und und und...

Grüße

Winni

PascalDragon
Beiträge: 825
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Liste verfügbarer Codepages

Beitrag von PascalDragon »

MitjaStachowiak hat geschrieben:
Mo 21. Jun 2021, 14:23
wo finde ich eine Liste verfügbarer Codepages?
Die Code Pages basieren letztlich auf den Code Page Identifiers von Microsoft. Es kommt aber darauf an, was dein System unterstützt. Sprich wenn du unter Windows arbeitest, hast du alles zur Verfügung, was Windows auch anbietet. Unter *nix Systemen musst du cwstrings einbinden, damit die entsprechenden Funktionen der C-Bibliothek eingebunden werden.

Dann deklariest du deine deine Konstante für die Codepage und nutzt die:

Code: Alles auswählen

const
  CP_ISO8859_15 = 28605;
  
// Verwendung:
SetCodePage(t, CP_ISO8859_15, False);
CP_NONE heißt "verwende die Daten as-is", das heißt die RTL schleust die Daten einfach nur durch. Und das geht nur gut, wenn dein OS auch auf ISO-8859-15 eingestellt ist (bei einem deutschen Windows ist normal CP1252 eingestellt, welches nah genug an ISO-8859-15 dran ist, das es meist nicht auffällt).
FPC Compiler Entwickler

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Liste verfügbarer Codepages

Beitrag von MitjaStachowiak »

Scheint zu funktionieren mit CP_ISO8859_15 = 28605;

Danke. 8)

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Liste verfügbarer Codepages

Beitrag von theo »

Um die ursprüngliche Frage noch zu beantworten (für die Nachwelt :wink: )

Code: Alles auswählen

   LConvEncoding.GetSupportedEncodings(Memo1.Lines); 

Antworten