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
UTF8 als Kommandozeilenparameter?
Re: UTF8 als Kommandozeilenparameter?
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.
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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: UTF8 als Kommandozeilenparameter?
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
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?
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.
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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: UTF8 als Kommandozeilenparameter?
... wie wäre es mit einer Kodierung des UTF-8 Strings (z.B. Base64) ?
Das sollte dann sicher per Kommandozeile übergeben werden können!
Das sollte dann sicher per Kommandozeile übergeben werden können!
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
Re: UTF8 als Kommandozeilenparameter?
Hallo,
@STARGÅTE:
Meine Bedenken sind genau von der Art wie Du es äusserst:
@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
@STARGÅTE:
Ganz genau. Ich kann das ganz normal verarbeiten. Nur für die Anzeige (zB Fehlermeldungen) mache ich per PeekS() eine Konvertierung nach Windows 1252.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: π
Meine Bedenken sind genau von der Art wie Du es äusserst:
Daher die Frage...Ich weiß jedoch, dass zumindest Windows gerne aus einem Omega: Ω schnell mal ein normales O macht, also konvertiert, statt einfach beide Bytes anzuzeigen: Ω
@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