Umlaute in Konsolenanwendung...
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Umlaute in Konsolenanwendung...
Guten morgen allerseits,
Ich hab mal wieder ein UTF8 / Windows Problem
Das Programm im Anhang zeigt euch die übergebenen Parameter in seiner Konsole an. Das Problem ist nun, dass ich aus dem Program heraus eine Datei öffnen will, welche in einem Ordner mit Umlauten liegt.
Startet ihr das Programm aus der IDE, dann werden die Parameter anders übergeben wie wenn man das Programm mittels der beigefügten .bat datei startet.
Letzendes soll mein Programm nachher mittels Tfilestream die Datei lesen. Aber wenn das Fileexists schon nicht geht ...
Habt ihr noch eine Idee / könnt ihr das nachstellen, dann reporte ich es.
Nutze Hier WinXP, Lazarus revision 39124, FPC 2.7.1 alles in 32-Bit.
Gruß
Corpsman
Ich hab mal wieder ein UTF8 / Windows Problem
Das Programm im Anhang zeigt euch die übergebenen Parameter in seiner Konsole an. Das Problem ist nun, dass ich aus dem Program heraus eine Datei öffnen will, welche in einem Ordner mit Umlauten liegt.
Startet ihr das Programm aus der IDE, dann werden die Parameter anders übergeben wie wenn man das Programm mittels der beigefügten .bat datei startet.
Letzendes soll mein Programm nachher mittels Tfilestream die Datei lesen. Aber wenn das Fileexists schon nicht geht ...
Habt ihr noch eine Idee / könnt ihr das nachstellen, dann reporte ich es.
Nutze Hier WinXP, Lazarus revision 39124, FPC 2.7.1 alles in 32-Bit.
Gruß
Corpsman
- Dateianhänge
-
- Pröblem.zip
- Beispielprojekt
- (96.82 KiB) 106-mal heruntergeladen
--
Just try it
Just try it
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Umlaute in Konsolenanwendung...
Kann das Programm überhaupt wissen, in welchem Code ihm Kommandozeilen-Parameter übergeben werden ?
Windows benutzt als Zeichen-Code normalerweise UTF-16 (o.ä.) als Parameter wird Kommandozeilen-Programmen aber (soweit ich weiß) ein 8-Bit Code übergeben. Vermutlich nicht UTF-8. Vielleicht ANSI entsprechend der System-Landes-Kennung, oder ????
-Michael
Windows benutzt als Zeichen-Code normalerweise UTF-16 (o.ä.) als Parameter wird Kommandozeilen-Programmen aber (soweit ich weiß) ein 8-Bit Code übergeben. Vermutlich nicht UTF-8. Vielleicht ANSI entsprechend der System-Landes-Kennung, oder ????
-Michael
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
Naja meine Hoffnung war so ein bischen, dass wenn ich den Prameter für Fileexists TFilestream von Ausen bekomme er auch immer passend ist so das das Betriebsystem da nichts anprangert. Intern wandle ich den String ja eigentlich auch nicht um.
--
Just try it
Just try it
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Umlaute in Konsolenanwendung...
corpsman hat geschrieben: Intern wandle ich den String ja eigentlich auch nicht um.
Das wirst Du aber müssen. Der Parameter kommt nicht als UTF-8, sondern vermutlich als ANSI Codepage xyz, das Interface zur LCL ist (im Moment) UTF-8. Also inkompatibel, sobald irgendwelche nicht-ASCII-Zeichen kommen. Du musst also die passende Konvertierungs-Funktion aufrufen (Theo: welche ?!?!?!).
-Michael
Re: Umlaute in Konsolenanwendung...
mschnell hat geschrieben:Das wirst Du aber müssen. Der Parameter kommt nicht als UTF-8, sondern vermutlich als ANSI Codepage xyz, das Interface zur LCL ist (im Moment) UTF-8. Also inkompatibel, sobald irgendwelche nicht-ASCII-Zeichen kommen. Du musst also die passende Konvertierungs-Funktion aufrufen (Theo: welche ?!?!?!).
Dieses Prog. hat mit der LCL gar nichts zu tun.
Im Prinzip hat corpsman imho schon recht, dass nichts umgewandelt werden muss.
Ich sehe das Problem nicht.
P.S. Achso, doch der Quelltext ist UTF-8 und dort sind Umlaute hardcoded.
File Settings -> Encoding ändern.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Umlaute in Konsolenanwendung...
Wenn ich den OP richtig verstanden habe, kommt der String aus dem Kommandozeilen-Parameter und wird an an "FielExist" weitergegeben. Da sollte der Code des Quelltext doch keine Rolle spielen.
Gibt es eine definitive Aussage über die Codierung, die bei Paramstr() und bei FileExist() verwendet wird ?
-Michael
Gibt es eine definitive Aussage über die Codierung, die bei Paramstr() und bei FileExist() verwendet wird ?
-Michael
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
mschnell hat geschrieben:Gibt es eine definitive Aussage über die Codierung, die bei Paramstr() und bei FileExist() verwendet wird ?
Die gehören zur RTL und verwenden damit die Systemkodierung. Unter Windows ist das zurzeit Einstellungssache (Lokalisierung). Unter Linux eigentlich auch; hier wird in der Regel aber UTF-8 eingesetzt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Umlaute in Konsolenanwendung...
Socke hat geschrieben:Die gehören zur RTL und verwenden damit die Systemkodierung. Unter Windows ist das zurzeit Einstellungssache (Lokalisierung). Unter Linux eigentlich auch; hier wird in der Regel aber UTF-8 eingesetzt.
Welche Systemcodierung ? Wenn ich das richtig sehe gibt es bei Windows quasi alle APIs alternativ mit 8-Bit und mit 16-Bit Strings.
FileExist() und Paramstr() aus der RTL verwenden 8 Bit Strings. Also werden vermutlich die 8-Bit APIs benutzt, also ANSI-Codepage xyz. (Soweit ich weiß, gibt es aber auch ein paar UTF-8 Funktionen in der RTL, die dann auch so heißen)
Wären es nun LCL-Funktionen und nicht RTL-Funktionen würde vermutlich die 16 Bit Windows API verwendet und die (8-Bit-) Strings würden von UTF-8 in 16 Bit UTF-16 (o.ä.) konvertiert. (Der arme Programmierer muss also wissen, ob die verwendete Funktion aus der RTL oder der LCL stammt. )
Was das Problem des OP war ist mir dann aber nicht klar.
-Michael
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
Also eure Diskussion zeigt mir eins, einfach ist es nicht .
Was ich machen will ist eigentlich recht simpel
Ich Nutze Synaser um Daten via Uart zu versenden. Diese Daten Lade ich aus einem TStream.
Mein Kommandozeilenprogramm bekommt nun als Parameter die Datei die es zu versenden hat.
Ich muss also in der Lage sein die Datei xyz die ich über Paramstr(i) bekomme an die TFilestream Komponente weiter zu geben und zu laden. Unterwegs will ich noch Kontrollieren ob es die Datei überhaupt gibt. Verwende ich Dateien / Ordner, welche keine Umlaute äöü haben funktioniert alles wunderbar, da hier die Umwandlungsfehler auch nicht sind..
Was ich machen will ist eigentlich recht simpel
Ich Nutze Synaser um Daten via Uart zu versenden. Diese Daten Lade ich aus einem TStream.
Mein Kommandozeilenprogramm bekommt nun als Parameter die Datei die es zu versenden hat.
Ich muss also in der Lage sein die Datei xyz die ich über Paramstr(i) bekomme an die TFilestream Komponente weiter zu geben und zu laden. Unterwegs will ich noch Kontrollieren ob es die Datei überhaupt gibt. Verwende ich Dateien / Ordner, welche keine Umlaute äöü haben funktioniert alles wunderbar, da hier die Umwandlungsfehler auch nicht sind..
Code: Alles auswählen
..
Dateiname := paramstr(i);
..
if Fileexists(Dateiname) then begin
..
fs := Tfilestream.create(Dateiname, fmopenread);
..
synaser.sendbytes(...)
..
fs.free;
end;
--
Just try it
Just try it
Re: Umlaute in Konsolenanwendung...
corpsman hat geschrieben:Also eure Diskussion zeigt mir eins, einfach ist es nicht .
So schwierig kann's nicht sein. Du neigst manchmal ein bisschen zur Hilflosigkeit.
Geh doch mal Schritt für Schritt durch und schau, was wo warum welche Kodierung hat.
Mehr als UTF-8 und Latin1 sollte eigentlich nicht vorkommen.
Dann wandle ggf. am geeigneten Ort um mit UTF8ToSys oder SysToUTF8.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
Naja Hilflos bin ich immer dann wenn alle meine Versuche nichts bringen.
Wie ich schrieb, läuft es ja wenn ich die Parameter via IDE übergebe.
Und selbstverständlich habe ich die diversen utf8tosys und umgekehrt auch schon probiert.
Wie du übrigens hier Nachlesen kannst habe ich dieses Problem öfters. evtl liegt es ja auch an meiner Installierten Version, ..
Habe mir das FPC Buch nun bestellt, evtl. muss ich dann in zukunft weniger fragen *g*.
Wie ich schrieb, läuft es ja wenn ich die Parameter via IDE übergebe.
Und selbstverständlich habe ich die diversen utf8tosys und umgekehrt auch schon probiert.
Wie du übrigens hier Nachlesen kannst habe ich dieses Problem öfters. evtl liegt es ja auch an meiner Installierten Version, ..
Habe mir das FPC Buch nun bestellt, evtl. muss ich dann in zukunft weniger fragen *g*.
--
Just try it
Just try it
Re: Umlaute in Konsolenanwendung...
corpsman hat geschrieben:Habe mir das FPC Buch nun bestellt,
Das Buch ist sicher eine gute Idee (habe es selber zwar nicht). Aber ich tippe mal drauf, dass es dieses Problem nicht lösen wird.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
Aufm Stuttgarter Lazarustreffen lag es aufm Tisch und ich habs mal grob überflogen.
Als Nachschlagewerk und so zum mal durchblättern ist es super. Bisher hatte mich der Preis abgeschreckt. Aber es ist ja Weihnachten *g*.
Sag kannst du meine Fehler nachstellen ? Wenn nicht, welche Compiler / Lazarus Kombination nutzt du. Dann mache ich ein Update.
Unter Linux ist die Update geschichte ja so viel einfacher mit meinem Update skript *g*, da bin ich immer Wochenaktuell.
Als Nachschlagewerk und so zum mal durchblättern ist es super. Bisher hatte mich der Preis abgeschreckt. Aber es ist ja Weihnachten *g*.
Sag kannst du meine Fehler nachstellen ? Wenn nicht, welche Compiler / Lazarus Kombination nutzt du. Dann mache ich ein Update.
Unter Linux ist die Update geschichte ja so viel einfacher mit meinem Update skript *g*, da bin ich immer Wochenaktuell.
--
Just try it
Just try it
Re: Umlaute in Konsolenanwendung...
Ich hab mal extra wegen dir Windoof gebootet.
Irgendwie formulierst du dein Problem nicht aus, deshalb weiss ich auch nicht genau wo dein Problem ist.
Die Konsole muss natürlich die Zeichen erstmal darstellen können.
Mach mal auf der Konsole
chcp 850
und achte darauf, dass das run.bat auch Ansi ist.
Hauptproblem liegt wahrsch. im writeln, nicht in den Strings.
Irgendwie formulierst du dein Problem nicht aus, deshalb weiss ich auch nicht genau wo dein Problem ist.
Die Konsole muss natürlich die Zeichen erstmal darstellen können.
Mach mal auf der Konsole
chcp 850
und achte darauf, dass das run.bat auch Ansi ist.
Hauptproblem liegt wahrsch. im writeln, nicht in den Strings.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1498
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: Umlaute in Konsolenanwendung...
*g*
Ja das mit den großen Gedankensprüngen haben mir schon meine Lehrer immer vorgeworfen. Zu Hause hab ich auch kein Windoof, werde morgen testen und dann berichten.
[Edit]
Wie zu erwarten ist meine Codepage bereits auf 850
die run.bat ist ISO8859 codec.
Ja das mit den großen Gedankensprüngen haben mir schon meine Lehrer immer vorgeworfen. Zu Hause hab ich auch kein Windoof, werde morgen testen und dann berichten.
[Edit]
Wie zu erwarten ist meine Codepage bereits auf 850
c:\chcp
Aktive Codepage: 850.
c:\chcp 850
Aktive Codepage: 850.
die run.bat ist ISO8859 codec.
--
Just try it
Just try it