2009-06-19 7 views
7

Ich mache ein paar ziemlich String-Manipulation intensive Code in .NET C# und wurde neugierig über einige Joel Spolsky Artikel, die ich eine Weile in Erinnerung Lesen zurück:Wie lautet das interne Format einer .NET-Zeichenfolge?

http://www.joelonsoftware.com/articles/fog0000000319.html
http://www.joelonsoftware.com/articles/Unicode.html

Also, wie funktioniert. NET mach es? Zwei Bytes pro Zeichen? Es gibt einige Unicode-Zeichen^H^H^H^H^H Codepunkte, die mehr brauchen. Und wie ist die Länge kodiert?

Antwort

17

Bevor Jon Skeet hier auftaucht ist ein Link zu seinem excellent blog on strings in C#.

In der aktuellen Implementierung mindestens, Strings nehmen 20+ (n/2) * 4 Bytes (Rundung der Wert von n/2 nach unten), wobei n die Anzahl der Zeichen in der Zeichenfolge ist. Der Zeichenfolientyp ist insofern ungewöhnlich, als die Größe des Objekts selbst variiert.

+12

Bah Humbug. Nicht viel mehr für mich zu sagen, wirklich :) –

+4

Das wird Ihnen beibringen zu bloggen! –

+1

Es ist nicht wirklich auf meinem Blog - es ist auf meiner Artikel-Website :) Ich denke, ich sollte eine Art von Rep-Sharing-Schema verhandeln. Schade, ein schlechter Blogger/Artikel Poster ... –

9

.NET verwendet UTF-16.

Von System.String on MSDN:

„jedes Unicode-Zeichen in einer Zeichenkette von einem Unicode skalare Wert definiert ist, auch als Unicode-Codepunkt oder die Ordinalzahl (numeric) Wert der Unicode-Zeichen Jeden Codepunkt codiert werden. UTF-16-Codierung, und der numerische Wert jedes Elements der Codierung wird durch ein Char-Objekt dargestellt. "