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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2010, 15:33   #1
Lihosvet
 
Регистрация: 31.07.2010
Сообщений: 7
Вопрос utf-8 -> windows-1251

Имееться строка string в формате utf-8 как её перекодировать в windows-1251, желательно без подключения сторонних библиотек (которых нет изначально в Visual C++)?

Последний раз редактировалось Lihosvet; 26.08.2010 в 15:44.
Lihosvet вне форума Ответить с цитированием
Старый 26.08.2010, 17:12   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

iconv, либо создай свою таблицу соответствия utf8-cp1251
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 27.08.2010, 21:49   #3
SARGE
 
Регистрация: 25.05.2008
Сообщений: 9
По умолчанию

Такая же проблема... только как установить iconv?

Последний раз редактировалось SARGE; 27.08.2010 в 22:46.
SARGE вне форума Ответить с цитированием
Старый 28.08.2010, 09:25   #4
Lihosvet
 
Регистрация: 31.07.2010
Сообщений: 7
Радость

Дайти пожалуйста ссылку на iconv для Visual Studio
Lihosvet вне форума Ответить с цитированием
Старый 28.08.2010, 22:29   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

WinAPIшный вариант: из любой кодировки через MultiByteToWideChar в UTF-16, потом через WideCharToMultiByte в любую кодировку.
Цитата:
создай свою таблицу соответствия utf8-cp1251
Тут много всяких проблем, например, хотя такое не особо распространено, "ё" можно закодировать как "ё", то есть "е" + " ̈ ". (Firefox'у такой вариант не очень нравится, OpenOffice нормально переваривает).
Somebody вне форума Ответить с цитированием
Старый 30.08.2010, 08:09   #6
Lihosvet
 
Регистрация: 31.07.2010
Сообщений: 7
По умолчанию

Может кому-то ещё из новичков пригодиться
Код:
string Utf8_to_cp1251(const char *str)
{
	string res;	
	int result_u, result_c;


	result_u = MultiByteToWideChar(CP_UTF8,
		0,
		str,
		-1,
		0,
		0);
	
	if (!result_u)
		return 0;

	wchar_t *ures = new wchar_t[result_u];

	if(!MultiByteToWideChar(CP_UTF8,
		0,
		str,
		-1,
		ures,
		result_u))
	{
		delete[] ures;
		return 0;
	}


	result_c = WideCharToMultiByte(
		1251,
		0,
		ures,
		-1,
		0,
		0,
		0, 0);

	if(!result_c)
	{
		delete [] ures;
		return 0;
	}

	char *cres = new char[result_c];

	if(!WideCharToMultiByte(
		1251,
		0,
		ures,
		-1,
		cres,
		result_c,
		0, 0))
	{
		delete[] cres;
		return 0;
	}
	delete[] ures;
	res.append(cres);
	delete[] cres;
	return res;
}

Последний раз редактировалось Lihosvet; 30.08.2010 в 08:12.
Lihosvet вне форума Ответить с цитированием
Старый 01.09.2010, 13:32   #7
SARGE
 
Регистрация: 25.05.2008
Сообщений: 9
По умолчанию

Lihosvet Ошибку выдаёт
SARGE вне форума Ответить с цитированием
Старый 03.09.2010, 14:14   #8
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от SARGE Посмотреть сообщение
Ошибку выдаёт
Весьма информативно.
Somebody вне форума Ответить с цитированием
Старый 03.09.2022, 11:40   #9
PencilTorch
Новичок
Джуниор
 
Регистрация: 03.09.2022
Сообщений: 2
По умолчанию

Lihosvet, не знаю как, но отлично работает! Благодарю)
PencilTorch вне форума Ответить с цитированием
Старый 03.09.2022, 12:11   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вы только не очень полагайтесь на этот код. Там есть потенциальные утечки памяти.
macomics вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первести в кодировку Win-1251 Shouldercannon Общие вопросы Delphi 4 01.08.2010 14:55
php перекодировка из utf-8 в windows-1251 world12_tk PHP 3 25.04.2010 22:55
UTF-8 в Windows-1251 - нужна функция motorway PHP 3 04.07.2009 15:28
Wordpress. Поменять кодировку utf-8 на windows 1251 GarantR Фриланс 4 08.02.2009 12:09