Я пытаюсь определить последствия кодировки символов для программной системы, которую планирую, и при выполнении теста обнаружил что-то странное.Unicode SMP «character» в C# char
Насколько я знаю, C# внутренне использует UTF-16, который (насколько мне известно) охватывает каждую кодовую точку Unicode, используя два 16-битных поля. Поэтому я хотел сделать некоторые литералы символов и намеренно выбрал и 얤, потому что первая из плоскости SMP, а последняя - из плоскости BMP. Полученные результаты:
char ch1 = '얤'; // No problem
char ch2 = ''; // Compilation error "Too many characters in character literal"
Что происходит?
Из-за этого вопроса, если у меня есть строка «얤얤», она отображается правильно в MessageBox, однако, когда я преобразовываю ее в char [], используя ToCharArray, я получаю массив с четырьмя элементами, а не тремя. Также String.Length отображается как четыре, а не три.
Я что-то упустил?
Вероятно, это сохранение сложного символа в виде кодовой точки Юникода, которая обычно имеет два символа в длине. –
@ RaymondChen острый глаз ... Я пробовал несколько разных поисков и не нашел ничего подходящего! – 2013-05-10 16:44:08
Могу ли я как-то закрыть этот вопрос как дубликат? – 2013-05-10 16:50:51