Я понял, что в wxStyledTextCtrl, если комментарии пользователя содержат символы не ASCII, позиции, сообщаемые WordStartPosition
а также WordEndPosition
не правы. Каков хороший способ работы с не-ASCII символами в wxStyledTextCtrl? Как я могу определить символы, которые не являются ASCII?
Возможно, вы уже ответили на этот вопрос, но в проведенных мною экспериментах WordStartPosition и WordEndPosition по-прежнему работают с не-ASCII-символами. Данные внутри элемента управления хранятся в формате UTF-8, и эти функции дают число байтов в тех данных, где слово начинается и заканчивается. Если это не то, что происходит с вами, вы можете опубликовать образец, где они не работают?
Что касается определения того, какие символы являются ASCII и не являются ASCII, кажется, что работает что-то вроде следующего (при условии, что a является началом, а b является конечной позицией):
wxString s = m_stc->GetTextRange(a,b);
for (wxString::const_iterator i = s.begin(); i != s.end(); ++i)
{
wxUniChar uni_ch = *i;
if(uni_ch.IsAscii())
{
//something
}
else
{
//something else
}
}
Одна вещь, которую я заметил, это то, что если вы используете значение для a или b, которое находится в середине одного из символов не-ASCII, результирующая строка будет пустой. Я надеюсь, что это поможет, если вы еще не нашли решение.
Других решений пока нет …