wxStyledTextCtrl 非 ASCII 字符
wxStyledTextCtrl non ASCII characters
我意识到在wxStyledTextCtrl中如果用户的评论包含非ASCII字符,WordStartPosition
和WordEndPosition
报告的位置是错误的。在 wxStyledTextCtrl 中处理非 ASCII 字符的好方法是什么?如何识别非 ASCII 字符?
你现在可能已经回答了这个问题,但在我所做的实验中,WordStartPosition 和 WordEndPosition 仍然适用于非 ASCII 字符。控件内部的数据以 UTF-8 格式存储,这些函数给出该数据中单词开始和结束的字节数。如果这不是您遇到的情况,您可以 post 一个它们不起作用的示例吗?
至于确定哪些字符是 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 字符的中间,则生成的字符串将为空。如果您还没有找到解决方案,我希望这对您有所帮助。
我意识到在wxStyledTextCtrl中如果用户的评论包含非ASCII字符,WordStartPosition
和WordEndPosition
报告的位置是错误的。在 wxStyledTextCtrl 中处理非 ASCII 字符的好方法是什么?如何识别非 ASCII 字符?
你现在可能已经回答了这个问题,但在我所做的实验中,WordStartPosition 和 WordEndPosition 仍然适用于非 ASCII 字符。控件内部的数据以 UTF-8 格式存储,这些函数给出该数据中单词开始和结束的字节数。如果这不是您遇到的情况,您可以 post 一个它们不起作用的示例吗?
至于确定哪些字符是 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 字符的中间,则生成的字符串将为空。如果您还没有找到解决方案,我希望这对您有所帮助。