2016-02-26 2 views
10

Für folgenden Code in C:Wie wird utf-8 codierte Zeichenkette in c mit printf zum Bildschirm gedruckt?

char s[] = "这个问题"; 
printf("%s", s); 

Knew dass Quelldatei mit file Befehl "UTF-8 Unicode C Programmtext" ist.

Wie wird die Zeichenfolge nach dem Kompilieren codiert? Auch utf-8 in der .out-Datei?

Wenn die binäre Datei in bash ausgeführt wird, wie die Zeichenfolge im Speicher codiert ist? Ist es auch UTF-8?

Dann, wie Bash kennt das Codierungsschema und zeigen richtige Zeichen?

Zuletzt, jetzt weiß die Bash was zu zeigen, aber wie Bytes in Pixel auf dem Bildschirm übersetzt? Gibt es eine Zuordnung von Bytes zu Pixeln?

In all diesen Prozessen gibt es irgendeine Codierung oder Decodierung von UTF-8?

+1

Das ist ziemlich die Frage. Beachten Sie, dass bash, die Befehlsinterpreter-Shell und der Terminalemulator (das Fenster mit Text) nicht identisch sind. Ihr Programm spricht nicht mit bash, es läuft nur im selben Terminal wie bash (vorausgesetzt, dass bash die Shell ist, die Sie verwenden). – unwind

Antwort

4

GCC Unter der Annahme, sagt this manual page, dass der Präprozessor zuerst den Zeichensatz der eingehenden Dateien auf den so genannten Quelle Charakter übersetzen gesetzt, die für gcc UTF-8 ist. Für eine UTF-8-Datei passiert also nichts. Der Standard Ausführungszeichensatz wird dann für String-Konstanten verwendet, und das ist (wiederum für GCC) UTF-8 standardmäßig.

Ihre UTF-8-Zeichenfolge "überlebt" und existiert in der ausführbaren Datei als eine Menge von Bytes in UTF-8-Codierung.

Das Terminal hat auch einen Zeichensatz, und das muss übereinstimmen, das C-Programm tut nichts, um Strings beim Ausdruck weiter zu übersetzen, sie werden nur Byte für Byte so gedruckt, wie sie sind. Wenn das Terminal nicht für UTF-8 eingestellt ist, werden Sie nur Müll bekommen.

Wie ich in einem Kommentar notiert habe, hat bash damit nichts zu tun.

+0

So wird das Terminal zu einer Datei zugeordnet, und die ausführbare Datei schreibt die Bytes in die Datei mit IO-Unterbrechung. Das Terminal kann als ein Gerät behandelt werden, das Byte zu Pixeln abbildet. Ist es? – heLomaN

+0

Und Zuordnung von Byte zu Pixel erfolgt durch den Grafiktreiber. – heLomaN

Verwandte Themen