Ответ 1
Реализация wchar_t
под Windows stdlib - это UTF-16-забывая: он знает только о 16-разрядных кодовых модулях.
Таким образом, вы можете поместить суррогатную последовательность UTF-16 в строку, и вы можете рассматривать ее как отдельный символ, используя обработку более высокого уровня. Реализация строки не будет делать ничего, чтобы помочь вам и не помешать вам; он позволит вам включить любую последовательность блоков кода в вашу строку, даже те, которые были бы недействительны при интерпретации UTF-16.
Многие из высокоуровневых функций Windows поддерживают символы, созданные из суррогатов UTF-16, поэтому вы можете вызвать файл 𐐀.txt
и увидеть, как он корректно отобразится и правильно отредактирован (с помощью одного нажатия клавиши, а не два, чтобы перейти от персонажа) в программах, таких как "Проводник", которые поддерживают сложный текстовый макет (как правило, с использованием библиотеки Windows Uniscribe).
Но есть еще места, где вы можете видеть проглядывание UTF-16, например, тот факт, что вы можете создать файл с именем 𐐀.txt
в той же папке, что и 𐐨.txt
, где нечувствительность к регистру в противном случае запретила бы это или тот факт, что вы можете программно создать [U+DC01][U+D801].txt
.
Вот как педанты могут иметь хороший длинный и в основном бессмысленный аргумент о том, поддерживает ли Windows "строки UTF-16 или только UCS-2".