Ich mache in C # .NET ziemlich viel String-Manipulations-intensiven Code und bin neugierig auf einige Artikel von Joel Spolsky, die ich vor einiger Zeit gelesen habe:
Also, wie macht es .NET? Zwei Bytes pro Zeichen? Es gibt einige Unicode-Zeichen ^ H ^ H ^ H ^ H ^ H Codepunkte, die mehr brauchen. Und wie ist die Länge codiert?
Bevor Jon Skeet hier auftaucht, gibt es einen Link zu seinem exzellenten Blog über Strings in C #.
>In der aktuellen Implementierung nehmen die Strings mindestens 20 (n / 2) * 4 Bytes (Rundung des Werts von n / 2 ab), wobei n die Anzahl der Zeichen in der Zeichenfolge ist. Der String-Typ ist ungewöhnlich, da die Größe des Objekts selbst variiert
.NET verwendet UTF-16 .
Von System.String auf MSDN :
"Jedes Unicode-Zeichen in einer Zeichenfolge wird durch einen Unicode-Skalarwert definiert, der auch als Unicode-Codepunkt oder als ordinaler (numerischer) Wert des Unicode-Zeichens bezeichnet wird. Jeder Codepunkt wird mit UTF-16-Codierung und numerisch codiert Der Wert jedes Elements der Codierung wird durch ein Char-Objekt dargestellt. "