2016-09-21 7 views
0

wxStyledTextCtrl에서 사용자의 주석에 ASCII가 아닌 문자가 포함되어있는 경우 WordStartPositionWordEndPosition에 의해보고 된 위치가 잘못되었음을 알게되었습니다. wxStyledTextCtrl의 비 ASCII 문자를 처리하는 좋은 방법은 무엇입니까? 비 ASCII 문자를 어떻게 식별 할 수 있습니까?wxStyledTextCtrl ASCII가 아닌 문자

+0

나는 최선의 접근 방식이 아니지만, 한 가지 방법은 wxCharBuffer이고 텍스트는 wxString 인 RawText의 길이를 검사하는 것입니다. wxCharBuffer에는 비 ASCII 문자를 수용하기위한 추가 문자가 포함됩니다. – macroland

답변

0

아마도 지금까지이 질문에 대답했을 것입니다. 그러나 내가 한 실험에서 WordStartPosition과 WordEndPosition은 여전히 ​​비 ASCII 문자로 작동합니다. 컨트롤의 내부 데이터는 UTF-8 형식으로 저장되며,이 함수는 단어가 시작되고 끝나는 해당 데이터의 바이트 수를 제공합니다. 그것이 당신을 위해 일어나는 일이 아니라면, 작동하지 않는 샘플을 게시 할 수 있습니까? 내가 통보했다

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 
    } 
} 

한 가지입니다 : 다음과 같이하고 ASCII되지 않는 문자 결정으로

은 (최종 총수가 시작이다 가정와 b가) 작동하는 것 같다 비 ASCII 문자 중 하나의 중간에있는 a 또는 b의 값을 사용하면 결과 문자열이 비어있는 것입니다. 이미 해결책을 찾지 못했다면 도움이되기를 바랍니다.

+0

당신은'WordStartPosition'과'WordEndPosition'에 대해 당신이 맞습니다. 그러나 텍스트에 ASCII가 아닌 경우'GetTextRange'가 작동하지 않습니다. 'GetTextRangeRaw'는 std :: cout으로 스트리밍하는 것처럼 비 ASCII를 검사하는 더 좋은 방법 인 것처럼 보였습니다. 비 ASCII 문자를 볼 수 있습니다. – macroland