2013-12-05 2 views
1

Я прочитал немецкий текст из базы данных sqlite с C++ (текст выглядит хорошо с помощью средства просмотра базы данных). Но когда я показываю его в диалоге с SetDlgItemText, текст выглядит так (см. Рисунок).Немецкие символы отображаются некорректно с помощью SetDlgItemText

enter image description here

CString strWarning(pStmt->GetColumnCString(nCol));  
    SetDlgItemText(IDC_WARNING_MESSAGE, strWarning); 
+0

Возвращаемая строка, очевидно, кодируется в кодировке UTF-8, и функции Windows ожидают либо кодированные ASCII (устаревшие), либо 16-разрядные строки 'wchar' (с включенным Unicode, который может фактически быть настройкой по умолчанию сегодня). – usr2564301

ответ

5

Ваша строка выглядит она кодируется как UTF-8, Windows, не обрабатывает.

Вам нужно преобразовать его в UTF-16 и убедитесь, что вы вызываете широкую версию SetDlgItemText, либо путем изменения набора символов варианта вашего проекта в Use Unicode Character Set или указав SetDlgItemTextW.

Вы можете преобразовать свою строку из UTF-8 в UTF-16 с помощью функции MultiByteToWideChar.

+0

проект unicode, я решил проблему, вызвав GetColumnString16 (я использую библиотеку Kompex Sqlite), и это возвращает правильный формат строки :) –

+0

@Mario * «Проект unicode» * здесь не имеет отношения. Проблема заключается не в том, используется ли Unicode, а в том, согласны ли DB и потребитель на один и тот же символ ** кодирование **. – IInspectable

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