2016-09-21 6 views
0

Я понял, что в wxStyledTextCtrl, если комментарии пользователя содержат символы, отличные от ASCII, позиции, указанные WordStartPosition и WordEndPosition, неверны. Что такое хороший способ работы с символами, отличными от ASCII, в wxStyledTextCtrl? Как я могу идентифицировать символы, не являющиеся ASCII?wxStyledTextCtrl не символы ASCII

+0

Я должен ответить на мой вопрос: хотя это может быть не лучший подход, одним из способов было бы проверить длины RawText, который является wxCharBuffer, а текст - wxString. wxCharBuffer включает дополнительные символы для размещения символов, отличных от ascii. – macroland

ответ

0

Возможно, вы уже ответили на этот вопрос, но в моих экспериментах WordStartPosition и WordEndPosition по-прежнему работают с символами, отличными от ASCII. Данные внутри элемента управления хранятся в формате UTF-8, и эти функции дают количество байтов в тех данных, где слово начинается и заканчивается. Если это не то, что происходит для вас, можете ли вы опубликовать образец, где они не работают?

Что касается определения того, какие символы и не ASCII, то вроде следующего, кажется, работает (при условии, является началом и Ь конечное положение):

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, результирующая строка будет пустой. Надеюсь, это поможет, если вы еще не нашли решения.

+0

Вы правы насчет 'WordStartPosition' и' WordEndPosition'. Однако, «GetTextRange» не работал для меня, когда в тексте был не-ASCII. «GetTextRangeRaw», казалось, лучший способ проверить не-ASCII, как если бы вы передали его в std :: cout, вы можете увидеть символы, отличные от ASCII. – macroland

Смежные вопросы