2012-06-29 7 views
1

MS-Active Directory에서 일부 텍스트 데이터를 검색하여 Sqlite3 데이터베이스에 저장하는 C++ 프로그램을 작성했지만 utf-8 인코딩에 문제가 있습니다.ActiveDirectory와 Sqlite3간에 텍스트 데이터를 복사 할 때 C++ 문제가 발생했습니다.

일부 읽기에 따르면 활성 디렉토리의 데이터는 UTF-8로 인코딩되지만 C++에서 읽을 때 Sqlite3 (기본값은 utf-8)이 허용하지 않는 "와이드 char"(wchar_t)로 취급됩니다. UTF-8은 sqlite3_bind_text16을 사용하지 않는 한 "char"를 "sqlite3_bind_text"매개 변수로 사용하기 때문에 UTF-8을 사용하지만 데이터베이스의 크기가 커지므로이를 원하지 않습니다.

함수 "wcstombs_s"를 사용하여 "wchar_t"에서 "char"로 변환하려고했지만 결과 데이터가 올바르지 않습니다.

나는 MultiByteToWideChar 또는 WideCharToMultiByte를 사용하는 것이 유일한 방법이라고 읽었지만, 변환 비용이 상당히 비싸다는 것을 알기 때문에 노력하지 않았다.

여러분 중 누군가가 비슷한 상황에 처해 있었는지 알고 싶습니다.이 문제에 대해 깨끗하고 효과적인 해결책을 찾았습니다.

많은 감사!

답변

1

UTF-8 인코딩으로 만든 데이터베이스에서 sqlite3_bind_text16을 사용하더라도 크기가 증가하지 않으면 문자열이 즉석에서 UTF-8로 변환됩니다.

this page에서 "UTF-8 및 UTF-16 지원"단락을 참조하십시오.

+0

감사의 말 Alexis, 감사합니다. 즉각적으로 "한 표현에서 다른 표현으로 텍스트를 지속적으로 변환하는 것은 계산 상 비쌉니다." 그러나 나는 그것을 시도 할 것이다. 그러나 나는 다른 가능한 해결책에 열려있다. – vizcayno

관련 문제