<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Konsole und UTF8]]></title><description><![CDATA[<p>Hi!</p>
<p>UTF8-Ausgabe auf der Konsole will bei mir einfach nicht klappen.. Mein Testcode:</p>
<pre><code class="language-cpp">// UTF-8-Codepage setzen
if ( ! SetConsoleOutputCP( 65001 ) )
	MessageBox( 0, 0, 0, 0 );
char s[] = { 0xC3, 0x84 }; // Zum Testen 'Ä', sollte in der Font vorhanden sein.
DWORD d;
if ( ! WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), s, 2, &amp;d, 0 ) )
	MessageBox( 0, 0, 0, 0 );
</code></pre>
<p>Beide Funktionen schlagen <em>nicht</em> fehl, Codepage 65001 ist auch in der Registry angegeben. Lustigerweise erscheint nicht nur das Ä nicht, bei jedem Durchlauf erscheinen andere Buchstaben/Zeichen, aber immer zwei.</p>
<p>Weiß jemand, warum das nicht funktioniert? Schließlich scheint der Konsole der Umschwung auf UTF8 nichts auszumachen, dann erwarte ich auch von ihr, dass sie UTF8 anzeigt.</p>
<p>edit: Alrighty, hiermit funktioniert's: <a href="http://blog.kalmbachnet.de/?postid=98" rel="nofollow">http://blog.kalmbachnet.de/?postid=98</a>. Trotzdem frage ich mich, warum obiges nicht hinhaut..?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227234/konsole-und-utf8</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 10:59:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227234.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Nov 2008 19:08:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konsole und UTF8 on Wed, 12 Nov 2008 20:01:10 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>UTF8-Ausgabe auf der Konsole will bei mir einfach nicht klappen.. Mein Testcode:</p>
<pre><code class="language-cpp">// UTF-8-Codepage setzen
if ( ! SetConsoleOutputCP( 65001 ) )
	MessageBox( 0, 0, 0, 0 );
char s[] = { 0xC3, 0x84 }; // Zum Testen 'Ä', sollte in der Font vorhanden sein.
DWORD d;
if ( ! WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), s, 2, &amp;d, 0 ) )
	MessageBox( 0, 0, 0, 0 );
</code></pre>
<p>Beide Funktionen schlagen <em>nicht</em> fehl, Codepage 65001 ist auch in der Registry angegeben. Lustigerweise erscheint nicht nur das Ä nicht, bei jedem Durchlauf erscheinen andere Buchstaben/Zeichen, aber immer zwei.</p>
<p>Weiß jemand, warum das nicht funktioniert? Schließlich scheint der Konsole der Umschwung auf UTF8 nichts auszumachen, dann erwarte ich auch von ihr, dass sie UTF8 anzeigt.</p>
<p>edit: Alrighty, hiermit funktioniert's: <a href="http://blog.kalmbachnet.de/?postid=98" rel="nofollow">http://blog.kalmbachnet.de/?postid=98</a>. Trotzdem frage ich mich, warum obiges nicht hinhaut..?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613716</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 12 Nov 2008 20:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Wed, 12 Nov 2008 21:31:55 GMT]]></title><description><![CDATA[<p>Windows ist UTF16 basierend und nicht UTF8!<br />
Du kannst kein UTF8 ausgeben; das unterstützt Windows nicht.<br />
Auch verwendest Du die W-Funktion die sowieso nur TUF16 entgegennimmt und somit Dein Ansatz sowieso ganz falsch war....</p>
<p>Was (theoretisch) gehen würde ist, dass Du die A-Funktionen verwendest und vorher die lokale Codpage auf UTF8 setzt. Aber wie gesagt: Das geht nur Theoretisch da Windows UTF8 als lokale Codepage nicht unterstützt (Michael Kaplan hat darüber auch schon mal irgendwann gebloggt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613759</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 12 Nov 2008 21:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Wed, 12 Nov 2008 22:49:06 GMT]]></title><description><![CDATA[<p>Ok, gut, danke! Was ich aber dann nicht verstehe: Weißt du zufällig, warum hier (<a href="http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx</a>) steht, dass die UTF-16-Codepage nur von managed Anwendungen unterstützt wird (&quot;utf-16 [...] available only to managed applications&quot;)? Nur deshalb wollte ich's überhaupt mit UTF-8 versuchen, dachte ich doch, dass UTF-16 nicht funktionieren würde.<br />
Ich probier nochmal ne Weile herum, danke soweit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>PS: Die W-Funktion zu nehmen, war wirklich dämlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>PPS: Jo, ist ja lächerlich, mit WriteConsoleW und UTF16-Strings funktioniert ja alles tadellos <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613778</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 12 Nov 2008 22:49:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 00:05:39 GMT]]></title><description><![CDATA[<p>Es ist mir ja fast schon peinlich, aber ich krieg's mit std::wcout nicht hin:</p>
<pre><code class="language-cpp">std::wcout &lt;&lt; L&quot;..Ö..&quot; &lt;&lt; std::endl; // Zeigt &quot;..Î..&quot; an
std::wcout &lt;&lt; L&quot;..\u2261..&quot; &lt;&lt; std::endl; // Zeigt &quot;..&quot; an, Ausgabe scheint dann abzubrechen, sonst kein sichtbarer Fehler
</code></pre>
<p>Die Konsole ist aber definitiv Unicode-fähig, denn mit</p>
<pre><code class="language-cpp">DWORD d;
WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), L&quot;..Ö..\n&quot;, 6, &amp;d, 0 );
WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), L&quot;..\u2261..\n&quot;, 6, &amp;d, 0 );
</code></pre>
<p>klappt's ja einwandfrei. Ich hab eine Weile nach 'codecvt's und 'locale's gegoogelt, aber nichts für mich gefunden (anscheinend wollen alle nur mit UTF-8 arbeiten).</p>
<p>Aso, falls es eine Rolle spielen sollte: Ich nutze z.Zt. VC++ Express 2005 auf Vista 64.</p>
<p>PS: 0x2261 ist ≡ <a href="http://www.fileformat.info/info/unicode/char/2261/index.htm" rel="nofollow">(Link)</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613789</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Nov 2008 00:05:39 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 07:27:50 GMT]]></title><description><![CDATA[<p>Aber mein Blog hast Du aufmerksam gelesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a href="http://blog.kalmbachnet.de/?postid=23" rel="nofollow">http://blog.kalmbachnet.de/?postid=23</a></p>
<blockquote>
<p>Also one problem is that MS is not able to provide the full UNICODE glyphs to the default console font! If you want to display UNICODE you must use WriteConsoleW and you must change the font to “Lucida Console”.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1613843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613843</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 07:39:19 GMT]]></title><description><![CDATA[<p>Gilt das auch noch für VC++ 2008? Oder ist das unabhängig von der verwendeten CRT?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613849</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Thu, 13 Nov 2008 07:39:19 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 09:26:15 GMT]]></title><description><![CDATA[<p>Das hat ja nix mit VS zu tun, sondern mit dem OS. Vielleicht mag dies in Vista anders sein, hab ich aber noch nicht probiert; kann es mir aber nicht vorstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613908</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 13 Nov 2008 09:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 10:44:25 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Aber mein Blog hast Du aufmerksam gelesen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Ich hab nicht <em>alles</em> gelesen, das geb ich zu :p Ist aber voll mit wertvollem Wissen dein Blog, finde ich immer wieder erstaunlich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<blockquote>
<p>Also one problem is that MS is not able to provide the full UNICODE glyphs to the default console font! If you want to display UNICODE you must use WriteConsoleW and you must change the font to “Lucida Console”.</p>
</blockquote>
<p>Die Glyphen werden bei WriteConsoleW korrekt angezeigt, deshalb finde ich's so schade, dass wcout da versagt.</p>
<p>Ich kann das aber irgendwie nicht nachvollziehen: wstring und wcout sind für Unicode-Zeichen gedacht und &quot;unterstützen&quot; UCS2. Wieso wird dann intern Multibyte statt UCS2 verwendet? Ist ja einfach schauderhaft, die Implementierung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Gibt's da eine Lösung? Ich probiere mal, den internen Puffer auszutauschen und eine eigene Locale reinzuhauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613968</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Nov 2008 10:44:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 11:45:26 GMT]]></title><description><![CDATA[<p>Funzt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">#ifdef _WIN32
#include &lt;windows.h&gt;
#include &lt;iostream&gt;

namespace WindowsConsoleFix
{
	// Neuer Streambuf, der korrekt in die Konsole schreibt
	class MyStream : public std::wstreambuf
	{
		using std::wstreambuf::int_type;
		using std::wstreambuf::traits_type;

		protected:
			std::streamsize xsputn( const wchar_t* p, std::streamsize count )
			{
				DWORD d;
				WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), p, count, &amp;d, 0 );
				return count;
			}

			int_type overflow( int_type c=traits_type::eof() )
			{
				if ( c != traits_type::eof() )
				{
					DWORD d;
					WriteConsoleW( GetStdHandle(STD_OUTPUT_HANDLE), &amp;c, 1, &amp;d, 0 );
				}
				return c;
			}
	};

	// Dummy-Struct, deren Konstruktor zu Programmstart aufgerufen wird
	struct WinConsoleFix
	{
		WinConsoleFix()
		{
			// Nur wenn stdout auch mit einer Konsole verbunden ist,
			//  soll das neue Stream-Objekt drangehangen werden.
			if ( isConsoleAttached() )
				std::wcout.rdbuf( &amp;console_stream );
		}

		bool isConsoleAttached()
		{
			// Hier wird quasi nur getestet, ob das stdout-Handle auf eine Konsole verweist.
			COORD c = GetLargestConsoleWindowSize( GetStdHandle(STD_OUTPUT_HANDLE) );
			return c.X!=0 &amp;&amp; c.Y!=0;
		}

		MyStream console_stream;
	};

	WinConsoleFix fix;
}

#endif
</code></pre>
<p>edit: Nur std::endl kann ich noch nicht abfangen..<br />
edit2: std::endl funktioniert jetzt auch.<br />
edit3: Wem die Benutzung nicht klar ist: Einfach das Obige in eine eigene cpp-Datei werfen. Mehr brauchts nicht, auch nichts irgendwo inkludieren oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1613999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1613999</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Nov 2008 11:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 11:35:40 GMT]]></title><description><![CDATA[<p>Geht es auch nicht, wenn Du es zuvor explizit aktiviert hast? Ich dachte, dann geht es.... (_setmode)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614012</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 13 Nov 2008 11:35:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konsole und UTF8 on Thu, 13 Nov 2008 11:40:38 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>Geht es auch nicht, wenn Du es zuvor explizit aktiviert hast? Ich dachte, dann geht es.... (_setmode)</p>
</blockquote>
<p>Ne, irgendwie nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /></p>
<p>Aber obiger Codefetzen funktioniert, das reicht mir erstmal. std::endl hab ich auch gerade hingekriegt und oben korrigiert. Nicht, dass ich ganz verstanden hätte, was ich da getan hab, aber solange es funktioniert, will ich mich nicht beschweren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1614016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1614016</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 13 Nov 2008 11:40:38 GMT</pubDate></item></channel></rss>