Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2011, 16:42   #1
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
Радость Перевод кодировки

Всем привет!

Такая задача
Имеем html-код
Знаем кодировку (charset)
Если кодировка, отличная от UTF-8 - нужно выполнить преобразование к UTF-8

Какими способами (желательно, без использования сторонних библиотек и функционала, таких как boost, QT и т.д.) привести текст к нужной кодировке?

Есть ссылка на хабрахабр с описанием - Кодировки в C++ - к сожалению, не подходит, потому что там используется boost.

Буду признателен за любые ответы
Lindemann66 вне форума Ответить с цитированием
Старый 01.08.2011, 19:00   #2
Tony Parker
Пользователь
 
Регистрация: 19.12.2010
Сообщений: 52
По умолчанию

Проще всего это выполнить в Линуксовой консоли (подробнее - man iconv):

Код:
$ iconv -f WINDOWS-1251 -t UTF-8 myfile.html > myfile_utf8.html

Если требуется написать программу, то берём код отсюда - http://www.opensource.apple.com/sour...nv/src/iconv.c
AllSuccess1.ru - каталог полезных курсов.
Tony Parker вне форума Ответить с цитированием
Старый 02.08.2011, 11:53   #3
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Я тут ещё поискал и почитал, и вот что нашёл

Предложили использовать
Код:
MultiByteToWideString(1251, ...);
WideStringToMultiByte(CP_UTF8, ...);
но тут встаёт вопрос
функция MultiByteToWideString - это функция преобразования какой-либо кодировки в т.н "широкую" кодировку, т.е. в UTF
а функция WideStringToMultiByte - наоборот, из UTF в другую?
И какой заголовочный файл нужно подключать, чтобы использовать данные функции, учитывая, что я пишу на MFC

А ещё на одном форуме нашёл совет
Цитата:
#include "atlconv.h"
...
char* pstrString = "Hello There!";
wchar_t* pUnicodeString = 0;

USES_CONVERSION;

// Convert Ansi to Unicode.
pUnicodeString = A2W( pstrString);
// Convert Unicode to Ansi.
pstrString = W2A( pUnicodeString);
Но тут выполняются преобразования UTF <-> ANSI
А если не ANSI?

А ещё есть некая функция loadU..

Код:
std::wstring widestr = std::wstring(str.begin(), str.end());
wchar_t* widecstr = widestr.c_str();
CA2W pszWide(widecstr);
loadU(pszWide);
Lindemann66 вне форума Ответить с цитированием
Старый 02.08.2011, 15:50   #4
Lindemann66
Форумчанин
 
Регистрация: 28.02.2011
Сообщений: 127
По умолчанию

Да, кстати, вопрос

Не важно, какого типа должна быть строка?
CString, LPWSTR, LPSTR, какая-либо ещё?

Просто я делаю так:
Код:
//перекодировка строки к кодировке 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:
	int res = MultiByteToWideChar(codePages[from], 0, str, -1, pwText, dwNum);

	return CString(pwText);
}
Просто, когда я смотрю в результат кодировки, там точно такой же текст без всяких изменений
И в БД, после добавления, символы тоже не меняются
Может, я в чём-то ошибся?
Lindemann66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодировки Adblock PHP 3 23.11.2010 23:52
Кодировки chandrasecar БД в Delphi 2 13.11.2010 23:13
Кодировки jungle Операционные системы общие вопросы 8 08.09.2009 09:31
Кодировки BOBAH13 Общие вопросы Delphi 8 29.08.2008 14:20
Кодировки CoDeR Общие вопросы Delphi 5 01.09.2007 21:39