Тут выяснилась одна интереснейщая подробность...
В Windows, где Unicode = UTF-16, они таки впоролись в проблему:
Юникод и .NET
Ещё несколько лет назад считалось, что все символы «влезут» в диапазон между 0 и 216-1, а это значило, что любой символ можно представить при помощи двух байтов. К сожалению, со временем потребовалось больше символов, что привело к появлению т.н. «суррогатных пар» (surrogate pair). С ними всё стало значительно сложнее
C#, Суррогатные пары Unicode в VisualStudio
Также везде пишут, что суррогатные пары Unicode не поддерживаются только в Windows 95 и 98, а в Windows 2000, XP, Vista, 7, 8
все должно быть в порядке. Однако не работает.
Сурогатные пары - это проблемы выньдаунов, и оставим их решать выньдаунам (пока, временно, или насовсем)
Юникод
В UTF-8 не используются суррогатные пары, 4 байтов достаточно для записи любого символа юникода.
P.S. Уточним здесь только, что 4 байта - это код Unicode, UTF-32, или wchar_t (POSIX). А символ в UTF-8 (
мультибайтном) может представляться
от 1 до 6 байт.
P.P.S. Когда (давно!) я обстоятельно изучал английский, мне запомнилось от университетского преподавателя английская присказка, что-то типа: "I foot my feet..." - что-то типа русского: "Я опять вступил в говно...". Так вот это они точно про Windows ещё тогда придумали!
