2009-08-07 4 views
3

Dies ist eine ziemlich niedrige (im Sinne von "näher am Metall") Frage.Linux vs. Windows: Wie rendert die Konsole Unicode-Zeichen?

Ich habe mich gefragt, ob jemand von mir auf Dokumentation, Erklärungen, etc. zeigen könnte, wie beim Empfang eines Unicode-Zeichens (oder eines beliebigen Zeichencodes, aber ich interessiere mich besonders für den Unicode-Standard) die Konsole in Windows , good ol 'cmd.exe (mit, sagen, Codepage 65001) und xterm in Linux begann mit, sagen wir LC_CTYPE=en_US.UTF-8 suchen Sie die entsprechende Glyphe (und wo).

Ich weiß, dass es in Windows schwieriger sein kann, aber ich kann nicht wirklich viele Informationen finden.

Vielen Dank.

Antwort

3

Soweit ich das beurteilen kann, ist cmd.exe an eine beliebige Codepage mit 256 Zeichen gebunden, die Sie als "Codepage für Nicht-Unicode-Programme" oder wie auch immer es bezeichnet wurde.

Wenn ich die obige Einstellung auf Japanisch setze, ersetzt cmd.exe plötzlich Backslashes mit Yen-Zeichen (wie jede andere Nicht-Unicode-Anwendung auf dem System) und interpretiert zum Beispiel ShiftJIS-Codes korrekt. Wenn ich es auf Holländisch setze, gebe ich ein akzentuiertes I (ich habe das vergessen), während eine andere Codepage einen halbgefüllten vertikalen Körper statt des gleichen Zeichens ergeben würde.

Nicht Unicode. Unicode würde mich alle drei gleichzeitig machen lassen.

+0

Es muss nicht 256-Zeichen: Shift-JIS ist eigentlich ein MBCS. Und ja, es hat diese Yen/Backslash Verwirrung in Windows, die sehr traurig ist und wahrscheinlich von DOS kommt ... – SamB

+1

Um zu verdeutlichen, * all * die japanischen Schriftarten in Windows * immer * tun das. Es spielt keine Rolle, ob die App * Unicode ist! Glaub mir nicht? Suche nach U + 005C in MS Mincho in 'charmap', oder siehe http://blogs.msdn.com/b/michkap/archive/2007/03/28/1972239.aspx – SamB

1

Die Konsole verwendet einen TextWriter mit einer aus der Codepage erstellten Codierung. Das bedeutet, dass die geschriebenen Zeichen unter Verwendung des spezifischen Codierungsobjekts für die Codepage in Bytes codiert werden.

+0

Er spricht ganz konkret über cmd.exe, Das ist nicht, zuletzt überprüft, eine .Net-Anwendung, so dass es logisch TextWriter nicht verwendet. Es sei denn, es gibt einen anderen TextWriter, von dem ich nichts weiß. – Kawa

+0

Ja, ich habe gerade überprüft. In Process Explorer wird es nicht genau in Gelb angezeigt. – Kawa

+0

Nun, wenn wir es auf die Konsole selbst eingrenzen, unterstützt es überhaupt keine Unicode-Zeichen. Wenn die aktuelle Kodierung nicht UTF-8 ist und Sie versuchen, eine UTF-8-Datei anzuzeigen, wird sie stattdessen mit der aktuellen Kodierung dekodiert, was natürlich alles außer dem ASCII-Zeichenbereich in Unordnung bringt. Wenn die aktuelle Kodierung UTF-8 ist, unterstützt sie immer noch keine Unicode-Zeichen, sondern nur Zeichen, die als UTF-8 codiert sind. – Guffa

1

Die Konsole unterstützt kein Unicode. :)

+0

Ja, das habe ich schon angedeutet. – Kawa

+0

Das trifft auf aktuelle Linux-Systeme nicht zu. –

+0

Für eine Definition der letzten, die mindestens bis 1996 für die Konsole zurückgeht. Wenn Sie Terminalemulatoren meinen wollten, wurde 1999 die Unterstützung für UTF-8 zu XTerm hinzugefügt und war bereits in einigen anderen Terminalemulatoren vorhanden. – AProgrammer