Что такое внутренний формат строки .NET? - PullRequest
7 голосов
/ 19 июня 2009

Я делаю довольно интенсивный код для работы со строками в C # .NET, и мне стало любопытно узнать о некоторых статьях Джоэла Спольски, которые я вспомнил, читая некоторое время назад:

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

Итак, как .NET это делает? Два байта на символ? Есть несколько символов Юникода ^ H ^ H ^ H ^ H ^ H, которые нуждаются в большем. А как кодируется длина?

Ответы [ 2 ]

17 голосов
/ 19 июня 2009

До появления Джона Скита есть ссылка на его отличный блог о строках в C #.

По крайней мере в текущей реализации строки занимают 20+ (n / 2) * 4 байта (округляя значение n / 2 вниз), где n - количество символов в строке. Тип строки необычен тем, что размер самого объекта варьируется

9 голосов
/ 19 июня 2009

.NET использует UTF-16 .

С System.String на MSDN :

"Каждый символ Unicode в строке определяется скалярным значением Unicode, также называемым кодовой точкой Unicode или порядковым (числовым) значением символа Unicode. Каждая кодовая точка кодируется с использованием кодировки UTF-16 и числового значение каждого элемента кодировки представлено объектом Char. "

...