Tach!
UTF-8 wird eher selten für die interne Verarbeitung verwendet, eben weil man sonst immer nur anhand der Sequenz die Zeichengrenzen bestimmen kann. Stattdessen nimmt man für Strings pro Zeichen 16 Bit (oder auch mal 32 Bit für die vergleichsweise selten verwendeten Zeichen oberhalb der BMP) und kann dann ähnlich effizient wie beim 1-Zeichen-gleich-1-Byte-Prinzip arbeiten.
könntest du mir das bitte etwas erklären? das hört sich sehr interessant an, nur verstehe ich es noch nicht so ganz.
UTF-8 ist ein Format, das eher als Kompromiss zu vorhandenen Texten mit ASCII-Zeichenumfang und zur Optimierung des Speicherbedarfs bei ASCII-lastigen Texten zu sehen ist.
Ich kenne nicht alle Stringverarbeitungssysteme, aber ich schließe mal kühn von ein paar mir bekannten Gegebenheiten und logischen Erwägungen auf die Allgemeinheit. Die Windows-String-Verarbeitung legt ihre Unicode-Strings in 16-Bit- oder auch 32-Bit-Strukturen ab, auf dass man wieder einen wahlfreien Zugriff auf Zeichen anhand einer Position mal Speicherbedarf eines Zeichens hat. Wenn man solche positionsorientierte Stringverarbeitung effizient machen möchte, kommt man kaum an einer solchen Speicherung mit festen Längen vorbei. Alternative wäre ein Index, der die Position jedes Zeichen speichert. Aber das nimmt am Ende mehr Speicher ein als der Overhead von ASCII-Zeichen in einer 16-Bit-Struktur.
Letzlich muss man sowieso die Praxis und konkrete Anwendungsfälle anschauen, als auf zu allgemeinem Niveau, abstrakte Nachteile zu suchen, die im Spezialfall vielleicht gar nicht relevant sind oder für die es eine akzeptable Kompromisslösung gibt.
Für die interne Verarbeitung ist es für einige Anwedungsfälle recht aufwendig, Texte mit Zeichenlängen von 1 bis 4 Bytes zu verwalten. (Das ist vergleichbar mit Arrays mit gleicher Datensatzlänge und Strukturen für unterschiedliche Daten(satz)größen. Bei ersteren kann man die Positionen der Felder anhand von n*Feldgröße berechnen, bei letzteren muss man anderweitig vorgehen.) In anderen Fällen kann es sein, dass diese unterschiedliche Länge nicht weiter ins Gewicht fällt, weil man keine exakte Positionen jedes einzelnen Zeichend berechnen können muss. In einem Editor muss beim Eingeben von Text vereinfacht gesehen nur eine Cursor-Position bekannt sein, die man immer nur vom bekannten Ort ein wenig nach vorn und hinten verschiebt, wobei man sich dann an den Zeichen entlanghangeln kann (so man vorwärts und rückwärts laufend die Zeichen-Grenzen erkennen kann, was zum Beispiel bei UTF-8 der Fall ist). Es kann aber auch sein, dass der Editor sich weniger an einer bestimmten Kodierung orientiert, sondern die vom Betriebssystem angebotenen Strukturen nutzt und den Text erst beim Speichern in eine bestimmte Kodierung umwandelt.
Im Allgemeinen sind diese Überlegungen, wie etwas intern abläuft (oder ablaufen könnte - es gibt ja oftmals mehrere Wege und mitunter sieht man nur eine Blackbox vor sich) einerseits zwar nicht uninteressant, andererseits aber auch müßig, weil man an den Gegebenheiten nichts ändern kann, wenn man sich nicht gerade beispielsweise eine Stringverarbeitungsbibliothek zu schreiben versucht.
dedlfix.