merkwürdiges codepage-problem

Rund um die LCL und andere Komponenten
Antworten
Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

merkwürdiges codepage-problem

Beitrag von Leberecht »

hallo,

ich habe ein merkwürdiges problem mit verschiedenen kodierungen unter lazarus und das problem ist, das ich das genaue problem einfach nicht verstehe bzw. nicht
erkennen kann, WO es hakt. die ausgangslage ist folgende:

1. ich habe unter win7(deutsch) eine datei in einem verzeichnis liegen. diese heisst "абвгдеж эюя.jpg".
2. in meinem lazarus-programm lese ich den verzeichnissinhalt in eine listbox ein, diese datei wird dann auch korrekt mit ihren kyrillischen buchstaben in der listbox angezeigt.
das heisst ja wohl, das lazarus den string von der system-kodierung korrekt in utf8 umwandelt, denn die lazarus-ide komponenten arbeiten ja alle nur in utf8.
3. ich möchte nun einen kommandozeilenbefehl absetzen, in welchem ich eine externe .exe aufrufe und diesen dateinamen als parameter übergebe. die externe .exe
kann diesen string handeln/beherrscht utf8/16 - wenn ich den befehl manuell auf der konsole absetze, geht das. in lazarus benutze ich das TProcess-objekt, weil ich auch die
rückgabe der .exe auslesen muss. das ganze klappt mit allen "normal" kodierten strings perfekt.

mein problem: ich krieg es nicht hin, an TProcess den korrekt kodierten string zu übergeben, so das er den befehl ausführen kann.

Code: Alles auswählen

oDOSProzess:=TProcess.Create(nil);
oDOSProzess.Options:=oDOSProzess.Options+[poNoConsole, poUsePipes];
oDOSProzess.CommandLine:=UTF8ToSys(sBefehl);
oDOSProzess.Execute;
das ganze geht schief, weil er den dateinamen in "??????? ???.jpg" und nicht "абвгдеж эюя.jpg" übersetzt.
andere konvertierungsvarianten wie
UTF8Decode, UTF8ToCP850, UTF8ToCP1252 funktionieren auch nicht. entweder sind die kyrillischen zeichen im zielstring weg oder durch fragezeichen ersetzt.
wie kann ich lazarus dazu bringen, das er den umwandlungsprozess des system-strings in utf8(den er ja am anfang beim einlesen korrekt vorgenommen hatte)
genauso in entgegengesetzte richtung zu wiederholen und das ganze so zurückzukodieren, wie er es am anfang eingelesen hat?

wenn ich in meiner windows-konsole(cmd.exe) die aktive codepage mit "chcp" prüfe, sagt er mir es ist die 850. wenn ich hingegen den lazarus-befehl
"GetDefaultTextEncoding" (unit lconvencoding) ausführe, sagt er mir es ist die cp1252.
kann mir irgentjemand erklären, was da GENAU vorgeht? ich blick es nicht mehr.
:cry:
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

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

Re: merkwürdiges codepage-problem

Beitrag von theo »

Afaik geht das im Moment einfach noch nicht.
TProcess ist Teil der FCL und diese ist noch nicht Unicode-tauglich.
Deshalb kannst du dort keine Kyrillischen Zeichen verwenden. 'öäü' etc. gehen, weil diese nach ANSI-Systemcodepage konvertiert werden können. Hättest du ein Kyrillisches Windows (oder Linux etc.), dann ginge es.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: merkwürdiges codepage-problem

Beitrag von Antrepolit »

Gibt es dafür nicht den TProcessUTF8?
Grüße, Antrepolit

care only if your os is really burning

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

Re: merkwürdiges codepage-problem

Beitrag von theo »

Antrepolit hat geschrieben:Gibt es dafür nicht den TProcessUTF8?
Ich denke das kann nur mit Umlauten etc., also alles was in der ANSI System Codepage darstellbar ist. Es benutzt hinten raus auch TProcess der FCL. Für kyrillisch sehe ich da schwarz.

Leberecht
Beiträge: 73
Registriert: Fr 28. Mai 2010, 08:39
OS, Lazarus, FPC: Win7 64bit, Lazarus 1.6.0 32bit (FPC 3.0.0)
CPU-Target: 32Bit
Wohnort: Heidelberg

Re: merkwürdiges codepage-problem

Beitrag von Leberecht »

ja, aber damit gehts auch nicht. anscheinend gibts da noch einen bug, das utf8 character nicht unterstützt werden ??!!:

http://62.166.198.202/view.php?id=20817" onclick="window.open(this.href);return false;

sehr geil, nur nicht für mich. :|
„Viel zu lernen du noch hast.“
(Yoda zu Dooku)

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

Re: merkwürdiges codepage-problem

Beitrag von theo »

Leberecht hat geschrieben:anscheinend gibts da noch einen bug, das utf8 character nicht unterstützt werden ??!!:
Ein Bug ist das nicht direkt. Es ist einfach nicht implementiert. :wink:

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: merkwürdiges codepage-problem

Beitrag von Antrepolit »

Wenn es proprietär sein darf, mach den Aufruf des Programms über die Windows-API-Funktion ShellExecuteW(). Da kannst du Unicode-Strings übergeben, was das Problem beheben sollte.

Info:
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Grüße, Antrepolit

care only if your os is really burning

Antworten