Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > Сохранение UTF-8 текста в БД


Автор: Lindemann66 2.8.2011, 14:23
Всем привет!
Такая задача

Необходимо сохранять в БД (SQL Server) текст в кодировке UTF-8

Кодировку текста меняю следующей функцией
Код

//перекодировка строки к кодировке UTF-8
CString ContvertToUTF8(CString str, CString from) {
    map<CString, int> codePages;
    codePages["utf-16"] = 1200;
    codePages["windows-1250"] = 1250;
    codePages["windows-1251"] = 1251;
    codePages["koi8-r"] = 20866;
    codePages["koi8-u"] = 21866;
    codePages["koi8-u"] = 21866;

    //если данной кодировки в списке нет
    if (codePages.find(from) == codePages.end()) {
        AfxMessageBox("Неизвестная кодировка " + from);
        return "";
    }    

    //Get the size of the string by setting the 4th parameter to -1:
    DWORD dwNum = MultiByteToWideChar(codePages[from], 0, str, -1, NULL, 0);

    //Allocate space for wide char string:
    wchar_t *pwText;
    pwText = new wchar_t[dwNum];
    if(!pwText) {
        delete []pwText;
    }
    //Then convert:
    MultiByteToWideChar(codePages[from], 0, str, -1, pwText, dwNum);

    return CString(pwText);
}


Но суть не в этом
Допустим, имеет страницу википедии
Она в UTF-8
...<div id="siteSub">Материал из Википедии — свободной энциклопедии</div>...

НО, когда текст страницы заносится в БД, при просмотре (использую SQL Manager 2011) в базе данные отображаются в каком-то другом виде, допустим, р*сѓр±сђрёрєр°с†рёсџ
Для работы с данными использую ODBC
То есть получается, что программа при записи в базу как-то сама конвертирует кодировку?
У кого-то ыбла похожая проблема?

Может, надо задавать кодировку в СРАВНЕНИИ в свойствах поля таблицы?
Там у меня установлена кодировка Cyrillic_General_Cl_AS

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)