.NET Framework хранит данные char
и string
с использованием кодировки UTF-16.Если вы предполагаете , что весь ваш текст находится в базовой многоязычной плоскости, тогда все будет работать без какого-либо специального кода.
Если вы считаете введенные пользователем строки как большие двоичные объекты и не пытаетесьчтобы манипулировать ими (например, большинство текстовых полей в приложениях CRUD), тогда ваш код будет отображаться для правильной обработки символов вне BMP, потому что UTF-16 хранит их как суррогатные пары.Пока вы не возитесь с суррогатными парами, все будет хорошо.
Однако, если вы хотите анализировать и манипулировать строками, а также корректно обрабатывать символы вне BMP, вам придется явно кодироватьза такую возможность.Обратитесь к классу StringInfo , чтобы узнать о методах, помогающих вам обрабатывать суррогатные пары.
Я думаю, что Microsoft разработала его таким образом, чтобы достичь баланса между производительностью и корректностью.Альтернативы могут быть:
- Хранить строки как UTF-32 - низкая производительность с точки зрения использования памяти
- Заставить все строковые функции обрабатывать суррогатные пары - очень плохопроизводительность для манипулирования
.NET также содержит полную поддержку преобразования, сравнения и сортировки с учетом культурных особенностей.