Seite 1 von 1

UTF8 als Kommandozeilenparameter?

Verfasst: 13.12.2011 13:38
von Kukulkan
Hallo,

wenn ich eine PureBasic Anwendung (nicht unicode sondern single byte) gerne UTF8 Zeichen per Kommandozeile übergeben möchte... Muss ich was beachten? Ich will meine .exe aus PHP aufrufen. Und da hab ich UTF8 kodiert. Möchte aber nicht, dass auf Windows 1252 konvertiert wird sondern auch UTF8 bekommen.

Grüße,

Kukulkan

Re: UTF8 als Kommandozeilenparameter?

Verfasst: 13.12.2011 13:48
von STARGÅTE
Das geht nicht.

In dem Moment, in dem du in einer Ascii-Exe ProgramParameter() aufrufst, wird die Komandozeile sofort in Ascii umgewandelt und ein Ascii-String zurück gegeben.
Damit du UTF8-Zeichen in die Exe einlesen kannst, muss deine Exe Unicode kompiliert werden.

Re: UTF8 als Kommandozeilenparameter?

Verfasst: 13.12.2011 19:14
von Kukulkan
Hallo,

naja, das geht schon. Ich kann auch in einer Single Byte Umgebung problemlos UTF8 Strings verarbeiten. Nur nicht in Gadgets darstellen. Ich nehme das entgegen, speichere, sende in's Internet etc. ohne die geringsten Probleme.

Meine Frage ist nur, ob ich bei Aufrufen meines Programmes per Kommandozeile da was beachten muss. Dass da dann für jedes Sonderzeichen zwei Bytes als UTF8 Code kommen ist ok.

Ich hab mehr bedenken, dass mir PureBasic oder gar Windows da irgendwas rumkonvertieren. Das wäre doof. Einfache Tests haben gezeigt, dass es soweit geht. Ich weiss nur nicht, ob die CP850 Kodierung bei manchen UTF8 Zeichen patzt. Ich hab jetzt nur mal die deutchen Umlaute getestet. Suche noch Testdaten...

Kukulkan

Re: UTF8 als Kommandozeilenparameter?

Verfasst: 13.12.2011 19:28
von STARGÅTE
Ich vermute mal du "missbrauchst" einen PB-Ascii-String als UFT8-SpeicherBuffer.
Das heißt du empfängt ein Pi-Zeichen: π
als 2 Ascii-Zeichen, in dem Fall: π
Deswegen kannst du es dann auch wieder umkonvertieren.

Da es in UTF8 keine Bytes (innerhalb eines Zeichens) gibt, die 00000000 enthalten (außer das NULL selbst), sollte es also keine Probleme in der Art geben, das dir dein String abgeschnitten wird.

Ich weiß jedoch, dass zumindest Windows gerne aus einem Omega: Ω schnell mal ein normales O macht, also konvertiert, statt einfach beide Bytes anzuzeigen: Ω

Fest steht auf jedenfall, dass es sicherer wäre in Unicode zu arbeiten.

Re: UTF8 als Kommandozeilenparameter?

Verfasst: 13.12.2011 23:44
von helpy
... wie wäre es mit einer Kodierung des UTF-8 Strings (z.B. Base64) ?
Das sollte dann sicher per Kommandozeile übergeben werden können!

Re: UTF8 als Kommandozeilenparameter?

Verfasst: 14.12.2011 09:39
von Kukulkan
Hallo,

@STARGÅTE:
Ich vermute mal du "missbrauchst" einen PB-Ascii-String als UFT8-SpeicherBuffer.
Das heißt du empfängt ein Pi-Zeichen: π
als 2 Ascii-Zeichen, in dem Fall: π
Ganz genau. Ich kann das ganz normal verarbeiten. Nur für die Anzeige (zB Fehlermeldungen) mache ich per PeekS() eine Konvertierung nach Windows 1252.

Meine Bedenken sind genau von der Art wie Du es äusserst:
Ich weiß jedoch, dass zumindest Windows gerne aus einem Omega: Ω schnell mal ein normales O macht, also konvertiert, statt einfach beide Bytes anzuzeigen: Ω
Daher die Frage...

@helpy:
Ja, das ist eine gute Idee. Ich hab das aber verworfen, da ich dann genaugenommen beides können sollte. Und mir ist noch keine Methode bekannt, einen String sicher als Base64 zu identifizieren. :(

Gibt es nicht eine Art Zusatzoption für den Aufruf (zB von CMD.EXE) mit dem ich das Verhalten dahingehend beeinflussen kann?

Grüße,

Kukulkan