pda писал(а):Попробуйте вместо:
- Код: Выделить всё
AO=#$C3#$85; // U+00C5
вставить:
- Код: Выделить всё
AO=#$CC#$8A; // U+030A 'COMBINING RING ABOVE'
Что теперь получается?
я же говрою - диакретический знак. Но это же решаемо, вместо StringReplace должен применятся другой алгоритм замены.
Но при использвании utf16 должен применятся подобный алгоритм, который будет проверять, не следует ли за символом, символ изменяющий его.
Рахница будет в том, что при использовании utf8, проверка "окончаний" будет выполнятся на много байтовых строках, а в UTF16 на widechar строках.
При правильном написании, т.к. деакретические знаки в основном 2 байтовые в utf8, сравнение будет одинаково эффективно
kazalex писал(а):С суророгатными парами мало кому вообще улыбнется встретиться, тогда как кодирование в UTF-8 суровая реальность за рамками ASCII
факт! но люди частенько (в спорах типа этого) говорят что "вот у вас там алгоритм не обрабатывает суррогатные пары". Довод технический, но мало практичесикий... я просто решил в этот раз сам его использовать
На самом деле понятие "суровая реальность" - это на 50% культурное восприятие. Почему, потому что мы привыкли что кирилица умещается в 128..255, и рабта многим (начинающим) программистам с мульти-байтовой кодировкой выглядит сложной. А какие-нибудь китайцы или японцы - всю жизнь работали только с мульти-байтовыми кодировками, им это не кажется трудоёмким.
Так же есть мнение (не проверял), что японцы и китайцы редко пишут (писали в бытность string-ов)код вроде:
s[Pos('с',s)]:='C';
сразу обрабатывая строку как мультибайтовая кодировка. И переход для utf-ы (любых мастей), для них особой проблемы не составляет, в психологическом плане