2016-09-21 119 views
0

我意识到,在wxStyledTextCtrl如果用户的评论中包含非ASCII字符,通过WordStartPositionWordEndPosition报道的立场是错误的。在wxStyledTextCtrl中处理非ASCII字符的好方法是什么?我如何识别非ASCII字符?wxStyledTextCtrl非ASCII字符

+0

我应该回答我的问题:虽然它可能不是最好的方法,但一种方法是检查RawText的长度是wxCharBuffer,文本是wxString。 wxCharBuffer包含附加字符以容纳非ASCII字符。 – macroland

回答

0

你现在可能已经回答了这个问题,但在我做的实验中,WordStartPosition和WordEndPosition仍然可以使用非ASCII字符。控制器内部的数据以UTF-8格式存储,并且这些函数给出该数据中字的开始和结束处的字节数。如果这不是你正在发生的事情,你可以在他们不工作的地方发布样本吗?

至于确定哪些字符和非ASCII,像下面似乎工作(假设为起点,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字符的中间,则结果字符串将为空。如果你还没有找到解决方案,我希望这会有所帮助。

+0

你对“WordStartPosition”和“WordEndPosition”是否正确。但是,当文本中存在非ASCII时,'GetTextRange'不适用于我。 'GetTextRangeRaw'似乎是检查非ASCII的一种更好的方式,就好像将它流式传输到std :: cout一样,您可以看到非ASCII字符。 – macroland