c: printf-Align und UTF-8

#7455246
Lesenswert?

Mein Problem lässt sich gut mit https://www.onlinegdb.com/online_c_compiler demonstrieren.

Code:

1
#include <stdio.h>
2

3
int main() {
4
  printf("'%10s'\n", "gut");
5
  printf("'%10s'\n", "scheiße");
6
  return 0;
7
}

Ausgabe:

1
'       gut'
2
'  scheiße'

Es geht um das Padding mit Leerzeichen und das offensichtliche Problem mit UTF-8 ('ß' > 127). Gibt es da eine elegante Lösung, sodass das Alignment auch mit solchen Zeichen korrekt funktioniert?

#7455523
Lesenswert?

Für ein uC-Programm kann man die Option -fexec-charset=ISO8859-15 benutzen. Der gcc Konvertiert dann den utf-8-Quelltext, und printf() arbeitet mit einem reinen 8-Bit-Zeichensatz. (Mit ISO8859-1 fehlt hauptsächlich das '€').

Kombiniert mit -finput-charset= kann auch die Umgebung und der Quelltext eine beliebige Kodierung benutzen.

https://gcc.gnu.org/onlinedocs/cpp/Character-sets.html

#7455648
Lesenswert?

Die Alternative wäre es, den Quelltext gar nicht erst in utf-8 zu speichern, sondern in einem reinen 8-Bit-Format -- aber das hängt natürlich vom Zielsystem ab, auf dem das resultierende Programm verwendet werden soll.

Als Konsolenanwendung für Windows wäre CP437/CP850 angebracht, als "normale" Windows-Anwendung hingegen CP1252 (was weitestgehend ISO8859-1 entspricht).

Wenn es aber auf einem µC laufen soll, hängts davon ab, worauf die Texte ausgegeben werden sollen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren