2011-01-20 2 views
0

아래 코드는 Windows 7 및 Windows XP에서 작동하지 않는 문제가 있습니까? 혹시 그 이유를 아십니까? 미리 감사드립니다. DB 오류가 아닌지 확인했습니다.CString 형식 문제 및 Windows XP와 7의 차이점은 무엇입니까?

Win 7의 경우 저장된 내용을 반환하며 Win XP의 경우에도 마찬가지입니다. 그러나 XP에서의 서식 설정은 CString을 ""으로 설정합니다.

if(getDB()->getEncoding() == IDatabase::UTF8){ 
    a_value.Format(_T("%s"), sqlite3_column_text(getCommand()->getStatement(), idx)); 
}else{ 
    a_value.Format(_T("%s"), sqlite3_column_text16(getCommand()->getStatement(), idx)); 
} 

또한 유니 코드 문제가 아닙니다.

+1

데이터베이스는 아마도 UTF입니다 -8이고, UTF-16 인 Windows "Unicode"를 사용하여 빌드 할 때'a_value.Format (L "% s", sqlite3_column_text16 (getCommand() -> getStatement(), idx))'두 가지 경우 모두. – dalle

+0

맞아,하지만 우리도이 문제를 해결할 인코더가있다. –

답변

0

이 문제는 실제로 Windows에서는 발생하지 않습니다. 작동하는 버전과 그렇지 않은 버전간에 서로 다른 빌드를 수행하지 않으시겠습니까?

유니 코드 빌드를 수행하면 sqlite3_column_text()이 잘못된 유형의 문자열을 반환하기 때문에 위의 코드는 문제가 있습니다. 유니 코드 빌드의 경우 sqlite3_column_text16()을 대신 입력해야합니다. 컴파일 중에 구성 문자 집합이

어쩌면 도움이 두 플랫폼

유니 코드

또는

멀티 바이트에 동일한 경우

+0

귀하의 의견에 따라 수정되었습니다. 유니 코드 문제가 아니라고 확신합니다. 또한 버전 및 빌드가 정확합니다. 그래도 고마워. –

+0

@baris_a : 편집으로 문제가 해결되지 않습니다. 유니 코드 또는 멀티 바이트 코드를 컴파일하고 있는지 알아야합니다. 이는 데이터베이스의 인코딩과 관련이 없습니다. –

+0

유니 코드 용 빌드입니다. 유니 코드 문제도 아닙니다. 필요한 경우 변환 할 인코더가 있습니다. Win XP에 있습니다. 서식을 지정하면 빈 CString이됩니다. –