//перекодировка строки к кодировке 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);
}
Проблема с отображением кодировки в Базе Данных
Такая задача
Необходимо сохранять в БД (SQL Server) текст в кодировке UTF-8
Кодировку текста меняю следующей функцией
Код:
Но суть не в этом
Допустим, имеет страницу википедии
Она в UTF-8
...<div id="siteSub">Материал из Википедии — свободной энциклопедии</div>...
НО, когда текст страницы заносится в БД, при просмотре (использую SQL Manager 2011) в базе данные отображаются в каком-то другом виде, допустим, р*сѓр±сђрёрєр°с†рёсџ
Для работы с данными использую ODBC
То есть получается, что программа при записи в базу как-то сама конвертирует кодировку?
У кого-то ыбла похожая проблема?
Может, надо задавать кодировку в СРАВНЕНИИ в свойствах поля таблицы?
Там у меня установлена кодировка Cyrillic_General_Cl_AS
Это текст в БД
Тоже текст в БД
Как видно, это не UTF-8 (в блокноте пытаюсь преобразовать - получается абракадабра)
А это тот же текст в VS
Как видно, тут он в UTF-8, и правильно преобразуется к исходному читабельному русскому
Код:
html = html.MakeLower();
Сам нашёл проблему
Дело закрыто :)