<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_windows-1251_%D0%B8_UTF-8</id>
		<title>FAQ:WinAPI VCPP:перекодировка между windows-1251 и UTF-8 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.shelek.ru/index.php?action=history&amp;feed=atom&amp;title=FAQ%3AWinAPI_VCPP%3A%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_windows-1251_%D0%B8_UTF-8"/>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_windows-1251_%D0%B8_UTF-8&amp;action=history"/>
		<updated>2026-05-27T07:55:16Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_windows-1251_%D0%B8_UTF-8&amp;diff=746&amp;oldid=prev</id>
		<title>RXL: Новая: ===Как производится конвертация из кодировки UTF8 в 1251 и наоборот?===  Можно перевести строку из UTF8 в Unicode, ...</title>
		<link rel="alternate" type="text/html" href="https://wiki.shelek.ru/index.php?title=FAQ:WinAPI_VCPP:%D0%BF%D0%B5%D1%80%D0%B5%D0%BA%D0%BE%D0%B4%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BC%D0%B5%D0%B6%D0%B4%D1%83_windows-1251_%D0%B8_UTF-8&amp;diff=746&amp;oldid=prev"/>
				<updated>2009-10-03T13:04:59Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ===Как производится конвертация из кодировки UTF8 в 1251 и наоборот?===  Можно перевести строку из UTF8 в Unicode, ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Как производится конвертация из кодировки UTF8 в 1251 и наоборот?===&lt;br /&gt;
&lt;br /&gt;
Можно перевести строку из UTF8 в Unicode, затем из Unicode в 1251&lt;br /&gt;
&lt;br /&gt;
Ниже приведена структура, содержащая процедуры перекодирования, а также процедуру с примером использования.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
// описание структуры&lt;br /&gt;
struct coder&lt;br /&gt;
{&lt;br /&gt;
	// utf8-&amp;gt;unicode&lt;br /&gt;
	static wchar_t* utf8_to_unicode__dontForgetDeleteArr(const char *utf8_string)&lt;br /&gt;
	{&lt;br /&gt;
		wchar_t* pRes = 0;&lt;br /&gt;
		int res_len = 0;&lt;br /&gt;
&lt;br /&gt;
		// тест на возможность преобразования&lt;br /&gt;
		res_len = MultiByteToWideChar(CP_UTF8, 0, utf8_string, -1, 0, 0);&lt;br /&gt;
&lt;br /&gt;
		if (!res_len)&lt;br /&gt;
			return 0;&lt;br /&gt;
&lt;br /&gt;
		// выделяем память&lt;br /&gt;
		pRes = new wchar_t[res_len];&lt;br /&gt;
&lt;br /&gt;
		if (!pRes)&lt;br /&gt;
			return 0;&lt;br /&gt;
&lt;br /&gt;
		// преобразование&lt;br /&gt;
		if (!MultiByteToWideChar(CP_UTF8, 0, utf8_string, -1, pRes, res_len))&lt;br /&gt;
		{&lt;br /&gt;
			delete[] pRes;&lt;br /&gt;
			return 0;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return pRes;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// unicode-&amp;gt;1251&lt;br /&gt;
	static char * unicode_to_1251__dontForgetDeleteArr(const wchar_t *unicode_string)&lt;br /&gt;
	{&lt;br /&gt;
		char* pRes = 0;&lt;br /&gt;
		int res_len = 0;&lt;br /&gt;
&lt;br /&gt;
		// тест на возможность преобразования&lt;br /&gt;
		res_len = WideCharToMultiByte(1251, 0, unicode_string, -1, 0, 0, 0, 0);&lt;br /&gt;
&lt;br /&gt;
		if (!res_len)&lt;br /&gt;
			return 0;&lt;br /&gt;
&lt;br /&gt;
		// выделяем память&lt;br /&gt;
		pRes = new char[res_len];&lt;br /&gt;
&lt;br /&gt;
		if (!pRes)&lt;br /&gt;
			return 0;&lt;br /&gt;
&lt;br /&gt;
		// преобразование&lt;br /&gt;
		if (!WideCharToMultiByte(1251, 0, unicode_string, -1, pRes, res_len, 0, 0))&lt;br /&gt;
		{&lt;br /&gt;
			delete[] pRes;&lt;br /&gt;
			return 0;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return pRes;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// процедура с примером&lt;br /&gt;
	static void Example()&lt;br /&gt;
	{&lt;br /&gt;
		wchar_t* unicode_string = 0;&lt;br /&gt;
		char* cp1251_string = 0;&lt;br /&gt;
&lt;br /&gt;
		// исходный текст&lt;br /&gt;
		char utf8_string[] = &amp;quot;UTF-8 + русский текст&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		for (;;)&lt;br /&gt;
		{&lt;br /&gt;
			unicode_string = utf8_to_unicode__dontForgetDeleteArr(utf8_string);&lt;br /&gt;
&lt;br /&gt;
			if (!unicode_string)&lt;br /&gt;
			{&lt;br /&gt;
				AfxMessageBox(&amp;quot;Не удалось конвертировать в unicode!&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			cp1251_string = unicode_to_1251__dontForgetDeleteArr(unicode_string);&lt;br /&gt;
&lt;br /&gt;
			if (!cp1251_string)&lt;br /&gt;
			{&lt;br /&gt;
				AfxMessageBox(&amp;quot;Не удалось конвертировать из unicode!&amp;quot;);&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// cp1251_string - результат&lt;br /&gt;
		AfxMessageBox(cp1251_string);&lt;br /&gt;
&lt;br /&gt;
		// не забываем удалить массивы&lt;br /&gt;
		if (unicode_string)&lt;br /&gt;
		{&lt;br /&gt;
			delete[] unicode_string;&lt;br /&gt;
			unicode_string = 0;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (cp1251_string)&lt;br /&gt;
		{&lt;br /&gt;
			delete[] cp1251_string;&lt;br /&gt;
			cp1251_string = 0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// вызов примера&lt;br /&gt;
coder::Example();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:FAQ:WinAPI VCPP]]&lt;/div&gt;</summary>
		<author><name>RXL</name></author>	</entry>

	</feed>