digger> Имеется в виду не изображение,а логическая буква как единица замены, матча итп. Это должно рабитать как будто это одна буква,иначе неудобно.Вопрос.Как работает charAt() на букве,состоящей из 2-х символов и что он возвращает,если значение не влазит в wchar_t ,например буква 'й' ,корейские,огласовки и им подобные? "буй".charAt(2) чему равно? А "буй".charAt(3)?
А пробел — это буква? А точка? Или мы всё же говорим о символе? И почему это должно работать, как одна буква? Кстати, в смысле абстрактного символа, оно так и работает. Это отображение этого символа на устройстве работает по другому. Но точно так же работает по другому отображение любого управляющего символа. А, если учесть ещё и фонты, то отображение каждого символа работает так. В тех же пропроциональных фонтах размер знакоместа разный по разным направлениям (почему векторную графику и используют). Поэтому вычисление длины показа строки на экране зависит от многих параметров — размер фонта, пропорциональность фонта. И ничто не мешает для специальных символов типа диакритики указывать вертикальный размер нормальным числом, а горизонтальный размер нулём или отрицательным — он будет сверху/снизу, но место займёт столько, сколько последующий символ.
И charAt будет возвращать просто абстрактный символ, которые там есть. Тем более, что с точки зрения приложений, которые хранят, передают, выполняют поиск — разницы нет. Разница появляется в тех приложениях, что отображают. Но там так и положено. Код, которые форматирует строку для представления на устройстве, должен быть отдельно.
И на "букве" состоящей из двух символов wchar_t работает совершенно нормально, т.к. это два символа. А вот любой китайский символ конца их алфавита из классических уже в 16 разрядов не влазит — тупо число больше, чем 64 К.