vim - Darstellung der Umlaute

16/09/2016 - 10:40 von Andre Tann | Report spam
Hallo zusammen,

mir ist folgende Darstellung des vim nicht ganz klar. Nehmen wir an, der
Cursor steht in einem File mit encoding=utf-8 auf einem "à". Dann ergibt

ga: <à> 228, Hex 00e4, Oktal 344

Aber

g8: c3 a4

Wieso stimmen die beiden Ausgaben nicht überein? Sprich, wieso gibt ga
als Hex-Wert nicht auch c3 a4?

Wenn ich im Insert-Modus eingebe ctrl-v u 00e4, dann kriege ich mein à.
Gebe ich ctrl-v u c3a4 ein, dann kommt ein schràger Whitespace dabei raus.

Kann jemand Licht ins Dunkel bringen?

Merci
Andre Tann
 

Lesen sie die antworten

#1 Christian Brabandt
17/09/2016 - 16:40 | Warnen spam
Andre Tann schrieb am Donnerstag, den 15. September 2016:

mir ist folgende Darstellung des vim nicht ganz klar. Nehmen wir an,
der Cursor steht in einem File mit encoding=utf-8 auf einem "à".
Dann ergibt

ga: <à> 228, Hex 00e4, Oktal 344

Aber

g8: c3 a4

Wieso stimmen die beiden Ausgaben nicht überein? Sprich, wieso gibt
ga als Hex-Wert nicht auch c3 a4?

Wenn ich im Insert-Modus eingebe ctrl-v u 00e4, dann kriege ich mein
à. Gebe ich ctrl-v u c3a4 ein, dann kommt ein schràger Whitespace
dabei raus.

Kann jemand Licht ins Dunkel bringen?



Das hàngt damit zusammen, wie die Bytes in UTF-8 kodiert werden.

Vereinfacht erklàrt, kodiert UTF-8 alle Zeichen mit mehreren Byte, die
außerhalb von ASCII liegen. Bei allen Codepunkten > 127 gibt das erste
Byte immer an, wieviele weitere Bytes folgen, das höchstwertige Bit ist
immer 1, gefolgt von sovielen 1 wie weitere Bytes folgen. Die
nachfolgenden Bytes fangen dann immer mit 10XXXXXX an, man kann also nur
noch 64 Zeichen je weiterem Byte kodieren.
Das bedeuted, wenn das erste Byte 110XXXXX ist, folgt noch 1 weiteres
Byte, bei 1110xxxx 2 weitere Bytes, etc.

D.h. die Zeichen werden folgendermaßen abgebildet:
Codepunkt: Kodierung
U+007F: 0x7f (01111111, 1 Byte, noch innerhalb von ASCII)
U+0080: 0xC2 0x80 (11000000 10000000),
U+0081: 0xC2 0x81 (11000000 10000001),
[…] und so weiter, bis zum 'à':
U+00E4: 0xC3 0xA4 (11000011 10100100).

In Vim erhàlst Du mit "g8" also die Kodierung in UTF-8, wàhrend du mit
"ga" den eigentlichen Codepunkt erhàlst.

Grüße
Christian
Wenn Gott mir nur ein klares Zeichen geben würde!
Etwa ein großes Bankdepot auf meinen Namen in der Schweiz.

Ähnliche fragen