2012-05-23 5 views
1

내 VC++ (VS2008) 프로젝트에서 멀티 바이트 문자 집합을 사용합니다.아랍어 텍스트 용 BSTR에서 CString 변환

내가 입력 날짜가이 형식 COleDateTime

_bstr_t bstr_tDate = bstrDate; //bstrDate is populated by a COM function 

const CString szStartDateTime = bstr_tDate.operator const char *(); 

bool bParseOK = oleDateTime.ParseDateTime(szStartDateTime); 

이 코드는 모든 국가 별 설정에서 잘 작동하지만, 아랍어 국가 별 설정에 실패에 날짜 문자열을 변환하는 다음 코드를했습니다 : 21/05/2012 11 : 50 : 31 م

변환 후, CString을 정크 문자를 포함하고 구문 분석 실패 : 2012년 1월 5일 11 : 50 : 28A

아랍어 설정에서 작동하는 BSTR to CString 변환이 있습니까?

typedef WCHAR OLECHAR; 
typedef OLECHAR* BSTR; 

'م'와 같은 특수 문자가 단일 WCHAR로 표시되는 것을 의미

+2

가장 좋은 해결책은 MBCS 사용을 중지하는 것입니다. –

답변

1

BSTR는 UTF-16 인코딩 된 유니 코드 코드 포인트들 (와이드 "문자", 16 비트)로 이루어지는 문자열이다. 멀티 바이트 문자열 (C 스타일 char* 또는 std::string)에서 이러한 특수 문자는 더 많은 문자로 표시됩니다 (따라서 "멀티 바이트"라고 함).

CString에 정크 문자가 포함 된 이유는 _bstr_t에서 직접 char*을 검색하기 때문입니다. 이 wide-char 문자열을 멀티 바이트 문자열로 먼저 변환해야합니다. 그 방법은 여러 가지가 있습니다. 그 중 하나는 WideCharToMultiByte function입니다.

이 질문은 또한 당신을 도울 것입니다 : How do you properly use WideCharToMultiByte

0

당신이 할하려고하면 MBCS 설정에도 불구하고 CString을 함께 가능하지만, 그것은 단지 아랍어를 지원합니다.

모든 유니 코드를 지원하는 것이 훨씬 쉽습니다. utf8everywhere.org의 Windows 섹션에있는 지시 사항을 따르면 기존 코드에 큰 피해를주지 않고이 작업을 수행 할 수 있습니다 (std :: string 및 char *를 유지할 수 있음).

관련 문제