2010-07-01 3 views
2

현재 C++로 작성되었으며 True OLE DBGrids를 MS Access 백엔드와 함께 사용하는 프로젝트에서 작업하고 있습니다. 이 모든 것이 잘 작동하기 때문에 우리는 GUI를 변환하여 아랍어 문자를 표시 할 수 있어야합니다. DBGrid는 유니 코드를 사용하지 않으므로 유니 코드를 사용하지 않고 데이터베이스의 문자를 표시하는 방법이 필요합니다. 현재 아랍어로 국가 별 언어 설정을 지정했으며이 작업을 수행 할 때 그리드에 아랍어 문자를 표시하도록 할 수는 있지만 코드를 통해이를 수행 할 수는 없습니다. 런타임에 영어와 아랍어간에 변경할 수 있어야합니다. 나는 데이터베이스에서 데이터를 끌어와 다음 코드를 사용하여 비 유니 코드로 변환 할 수 있습니다 : 나는 다음 AfxMessageBox에 아랍어를 게시 할 수 있습니다 이것으로유니 코드가 아닌 C++ 환경에서 아랍어 문자를 가져 오는 방법

_bstr_t tmp(vHolder.bstrVal, FALSE); //wrap the BSTR 
CString Caption(static_cast<const char*>(tmp)); //convert it 
RetCaption = Caption; 

를하고 올바르게 표시하지만 난 수없는 것 그리드가 유니 코드가 아닌 문자를 받아들이고 정확하게 표시되도록합니다.

아이디어가 있으십니까?

답변

1
CString Caption(static_cast<const char*>(tmp)); //convert it 

변환하지 않습니다. tmp에 영어 텍스트가 포함 된 경우 단일 문자가 생성됩니다. 그리고 아랍어 텍스트가있는 경우 Jibber의 땅에서 일반적인 말. 8 비트 문자를 사용하는 OLE 자동화 및 DBGrid에서 사용되는 UTF-16 변환은 변환을 사용하여 수행 할 수 없으며 변환 기능이 필요합니다. WideCharToMultiByte 또는 OLE2A와 같습니다.

이러한 변환은 스레드의 코드 페이지가 문자열에 사용 된 문자 집합과 일치 할 때만 읽을 수있는 텍스트를 재생산합니다. 그리드가 아라비아어를 표시하고 스레드 또는 코드 페이지로 변환하는 경우 영어는 아무 것도 생성하지 않고 많은 물음표를 생성합니다.

코드를 유니 코드 가능하게하지 않으려면 문자 집합을 즉시 전환 할 수 없습니다. 이 코드를 실행하는 운영 체제는 지난 17 년 동안이 코드를 지원했습니다.

관련 문제