Я использую Scintilla и устанавливаю его в utf8 (и это единственный способ сделать его совместимым с символами Unicode, если я его правильно понимаю). С этой настройкой, когда речь идет о позициях в тексте Scintilla означает байт позиций.Преобразование char pos UnicodeString в byte pos в строку utf8
Проблема в том, что я использую UnicodeString в остальной части моей программы, и когда мне нужно выбрать конкретный звонок в редакторе Scintilla, мне нужно преобразовать из char pos UnicodeString в байт pos в строку utf8, которая соответствующий UnicodeString. Как я могу сделать это легко? Благодарю.
PS, когда я нашел ByteToCharIndex Я думал, что это то, что мне нужно, в соответствии с его документом и результатом моего тестирования, оно работает только если система использует многобайтную систему символов (MBCS).
Вы уверены, что ByteToCharIndex Безразлично Работа? Я не удивлюсь, если текст документации предшествует Delphi 2009, когда AnsiString изменил свою собственную кодовую страницу. Теперь, когда AnsiString содержит кодовую страницу, функция должна быть способна определить, закодирована ли строка как MBCS, SBCS или UTF-8, вместо того, чтобы полагаться на системные настройки. –
@RobKennedy - Это не работает; Более того, функция Windows «CharNextExA» также не работает с UTF8. – kludg
Да, это не работает, поскольку Серг подтвердил, я тоже попробовал. –