Forum: Compiler & IDEs Codepage im Quelltext herausfinden


von Walter T. (nicolas)


Lesenswert?

Hallo zusammen,

ich weiß, wie ich Quelltext-Codepage und Output-Codepage im Build-Prozeß 
einstelle.

Gibt es eine Möglichkeit, im Executable die Codepage abzufragen?
Klar - ich kann meine eigene Funktion schreiben (ein paar Sonderzeichen 
mit dem Zahlenwert vergleichen), aber das wäre die weniger schöne 
Lösung.

Viele Grüße
W.T.

von MaWin (Gast)


Lesenswert?

Walter T. schrieb:
> Gibt es eine Möglichkeit, im Executable die Codepage abzufragen?
> Klar - ich kann meine eigene Funktion schreiben (ein paar Sonderzeichen
> mit dem Zahlenwert vergleichen), aber das wäre die weniger schöne
> Lösung.

Ja, wir machen das über die Taste F12. Ist direkt inkludiert!

von Walter T. (nicolas)


Lesenswert?

MaWin schrieb:
> Ja, wir machen das über die Taste F12. Ist direkt inkludiert!

Rätselhaft der Sinn Deiner Worte ist. Bei meinem Editor werden mit F12 
Quelltext-Teile verborgen.

Ich suche die Zeichensatztabelle, also das X bei ISO-8859-X.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das ist nicht MaWin, sondern ein Spinner.

von Dr. Sommer (Gast)


Lesenswert?

Die Codepage von was abfragen?! Die Original-Kodierung vom Quelltext 
(fast immer UTF-8)? Die vom Dateisystem? Die von MS Excel? Die von der 
mikrocontroller.net-Seite?

von Walter T. (nicolas)


Lesenswert?

Rufus Τ. F. schrieb:
> Das ist nicht MaWin, sondern ein Spinner.

Danke für die Klarstellung. Die Antworten des echten MaWin sind zwar 
nicht immer hilfreich, aber meistens auch kein kompletter Blödsinn.


Aber ich will doch noch einmal meine Fragestellung präzisieren: Ich 
suche die Zeichensatztabelle im Kompilat. Also z.B. das X bei ISO-8859-X 
oder eine äquivalente Information. Der Teil, den -fexec-charset= im GCC 
festlegt.

: Bearbeitet durch User
von Dr. Sommer (Gast)


Lesenswert?

Wenn's UTF-8 ist, dann ist das kein ISO-8859-irgendwas, also genau so 
ein X gibt es eher selten. Da zumindest beim GCC -fexec-charset per 
default UTF-8 ist, würde ich im makefile einfach per "-D" ein Makro 
übergeben was den Charset einstellt, ala:

CHARSET=ISO-8859-15
gcc "-DMYCHARSET=$(CHARSET)" "-fexec-charset=$(CHARSET)"

Wobei ich mich jetzt schon frage warum man das überhaupt ändern wollen 
würde? Das machts doch nur extra kompliziert.

von Walter T. (nicolas)


Lesenswert?

Dr. Sommer schrieb:
> Wenn's UTF-8 ist, dann ist das kein ISO-8859-irgendwas,

Deswegen ja auch "z.B.". Ich implementiere gerade eine 
Zeichensatztabelle, die auch Umlaute enthält. Damit das richtig 
funktioniert, muss ich natürlich sicherstellen, dass auch mit dem 
passenden Ziel-Zeichensatz kompiliert wird.

Im Optimalfall gibt es irgendeine Information, die ich im Präprozessor 
auswerten kann, um eine entsprechende Warnung auszugeben, sollte der 
Zeichensatz nicht passen.

Im zweitbesten Fall gibt es irgendeine Information, die ich zur Laufzeit 
auswerten kann.

von Dr. Sommer (Gast)


Lesenswert?

Schreib einfach -fexec-charset nicht ins makefile und schreib in die 
Doku, dass man es nicht hinzufügen soll. Das sollte wohl reichen? Ich 
vermute mal 90% der Programme würden nicht mehr funktionieren wenn 
jemand böswillig den Zeichensatz ändert, und keiner prüft das im Code... 
Oder nutze C++-Literale mit Encoding-Angabe ala u"üäö" um UTF-8 zu 
erzwingen.

von Bauform B. (bauformb)


Lesenswert?

Zumindest der i386-gcc kann die komplette Kommandozeile in die 
ausführbare ELF-Datei schreiben. Mit -g sollte es auf jeden Fall 
passieren, mit -frecord-gcc-switches eigentlich auch, aber evt. in einer 
anderen section.

https://stackoverflow.com/questions/12112338/get-the-compiler-options-from-a-compiled-executable
https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html
https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.