2011-01-20 1 views
0

Возникла проблема, ниже кода работает для Windows 7, а не для Windows XP? По какой-либо причине, вы знаете причину этого? Заранее спасибо. Я проверил, что это не ошибка БД.Проблема с CString Format и различия в 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, и вы создаете с использованием Windows Unicode, который является UTF-16, используйте 'a_value.Format (L"% s ", sqlite3_column_text16 (getCommand() -> getStatement(), idx)) 'для обоих случаев. – dalle

+0

Вы правы, но у нас есть кодер для решения этой проблемы. –

ответ

0

Это действительно не проблема Windows. Вы уверены, что не выполняете разные сборки между версией, которая работает, а другая - нет?

Этот код является проблематичным, потому что если вы создаете сборку Unicode, sqlite3_column_text() вернет неправильный тип строки. Для сборки Unicode вам нужно вместо sqlite3_column_text16().

+0

Отредактировано в соответствии с вашими отзывами. и я уверен, что это не проблема Unicode. Кроме того, версия и сборка верны. Спасибо хоть. –

+0

@baris_a: Ваше редактирование не решает проблему. Вам нужно знать, компилируете ли вы свой код для Unicode или multibyte. Это не связано с кодировкой в ​​вашей базе данных. –

+0

Он построен для Unicode. Это не проблема Unicode. У нас есть Encoder для преобразования, если это необходимо. Это в Win XP. Форматирование приводит к пустой CString. –

0

проверить, если набор символов сконфигурирован во время компиляции же на две платформы

юникода

или

многобайтном

может быть, это поможет, пока

 Смежные вопросы

  • Нет связанных вопросов^_^