Немецкие символы отображаются неправильно с SetDlgItemText

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

введите здесь описание изображения

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

person Mario M    schedule 05.12.2013    source источник
comment
Возвращаемая строка, очевидно, имеет кодировку UTF-8, и функции Windows ожидают либо ASCII на основе кодовой страницы (устарело), ​​либо 16-битные строки wchar (с включенным Unicode, который сегодня может быть настройкой по умолчанию).   -  person Jongware    schedule 06.12.2013


Ответы (1)


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

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

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

person Collin Dauphinee    schedule 05.12.2013
comment
проект юникод, я решил проблему, вызвав GetColumnString16 (я использую библиотеку Kompex Sqlite), и это возвращает правильный формат строки :) - person Mario M; 06.12.2013
comment
@Mario Проект Unicode здесь не имеет значения. Проблема не в том, используется ли Unicode, а в том, согласны ли БД и потребитель на одну и ту же кодировку символов. - person IInspectable; 06.12.2013