<?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[C++11: wstring oder string benutzen?]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe das Gefühl, dass die Frage vor längerer Zeit auch schon mal aufgetaucht ist, aber nun da C++11 und Unicode mehr oder weniger einsatzbereit sind, möchte ich nochmals darauf zurückkommen.</p>
<p>Wenn man frei wählen kann, sollte man eher zu std::string oder zu std::wstring greifen (gilt auch für die zugehörigen Streams und anderen Objekte)? Mir ist bewusst, dass ich mit UTF-8 auch in einem std::string Unicode speichern kann, welche dann mehrere Chars beanspruchen. Aber warum sollte man dann überhaupt jemals zu std::wstring greifen? Gibt es irgend einen Grund dafür?</p>
<p>Derzeit tendiere ich zu std::wstring, weil .NET und Windows UTF-16 nutzen, was in der Regel gut in wchar_t passt (beim GCC auf Linux ist wchar_t aber scheinbar 32 Bit lang; Platzverschwendung ist mir aber egal). Was sollte man wählen, wenn man seine Applikation möglichst portabel halten will?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306318/c-11-wstring-oder-string-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 10:05:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306318.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Jul 2012 21:15:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Tue, 24 Jul 2012 21:15:45 GMT]]></title><description><![CDATA[<p>Guten Abend,</p>
<p>Ich habe das Gefühl, dass die Frage vor längerer Zeit auch schon mal aufgetaucht ist, aber nun da C++11 und Unicode mehr oder weniger einsatzbereit sind, möchte ich nochmals darauf zurückkommen.</p>
<p>Wenn man frei wählen kann, sollte man eher zu std::string oder zu std::wstring greifen (gilt auch für die zugehörigen Streams und anderen Objekte)? Mir ist bewusst, dass ich mit UTF-8 auch in einem std::string Unicode speichern kann, welche dann mehrere Chars beanspruchen. Aber warum sollte man dann überhaupt jemals zu std::wstring greifen? Gibt es irgend einen Grund dafür?</p>
<p>Derzeit tendiere ich zu std::wstring, weil .NET und Windows UTF-16 nutzen, was in der Regel gut in wchar_t passt (beim GCC auf Linux ist wchar_t aber scheinbar 32 Bit lang; Platzverschwendung ist mir aber egal). Was sollte man wählen, wenn man seine Applikation möglichst portabel halten will?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235392</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Tue, 24 Jul 2012 21:15:45 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Tue, 24 Jul 2012 22:28:21 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Mir ist bewusst, dass ich mit UTF-8 auch in einem std::string Unicode speichern kann, welche dann mehrere Chars beanspruchen.</p>
</blockquote>
<p>Ist dir auch bewusst, dass das bei UTF-16 nicht anders ist? Unicode hat nämlich mehr als 2^16 verschiedene Zeichen.</p>
<p>/rant/ schrieb:</p>
<blockquote>
<p>Aber warum sollte man dann überhaupt jemals zu std::wstring greifen? Gibt es irgend einen Grund dafür?</p>
</blockquote>
<p>Nein</p>
<p>/rant/ schrieb:</p>
<blockquote>
<p>Derzeit tendiere ich zu std::wstring, weil .NET und Windows UTF-16 nutzen, was in der Regel gut in wchar_t passt</p>
</blockquote>
<p>Was hat dein Programm mit .NET zu tun?<br />
Benutzt du viel die WinAPI oder wozu benötigst du UTF-16-oder-was-das-ist?<br />
Was spricht dagegen, an entsprechenden Stellen zu konvertieren?<br />
Was beinhalten die Strings überhaupt?</p>
<p>/rant/ schrieb:</p>
<blockquote>
<p>(beim GCC auf Linux ist wchar_t aber scheinbar 32 Bit lang; Platzverschwendung ist mir aber egal). Was sollte man wählen, wenn man seine Applikation möglichst portabel halten will?</p>
</blockquote>
<p><code>char</code> / <code>string</code> / UTF-8</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235409</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Tue, 24 Jul 2012 22:28:21 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Wed, 25 Jul 2012 08:29:13 GMT]]></title><description><![CDATA[<p>Guten Morgen</p>
<p>Natürlich hat man mit UTF-16 die gleiche &quot;Problematik&quot;. Ein Zeichen muss nicht in 16 Bit passen. Das ist ja genau meine Frage: Warum hat man bei Java, .NET und diversen Betriebssystemen den Schritt gemacht und gesagt, wir nutzen UTF-16 und nicht UTF-8? Es muss ja irgendeine Motivation gegeben haben. Habe gedacht, man hätte vielleicht gute Gründe gehabt <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=":confused:"
      alt="😕"
    /></p>
<p>Zurzeit habe ich übrigens nicht vor, meine Applikation, wo sich diese Frage stellt, mit .NET oder Java zu programmieren, oder auch nur Interop mit solchen Libraries zu betreiben. Später kommen vielleicht einige .NET/Metro-Extensions dazu, aber das ist nicht Thema. Die Frage ist sowieso eher theoretisch zu verstehen.</p>
<p>MFG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235464</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Wed, 25 Jul 2012 08:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Wed, 25 Jul 2012 09:15:12 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Derzeit tendiere ich zu std::wstring, weil .NET und Windows UTF-16 nutzen, was in der Regel gut in wchar_t passt (beim GCC auf Linux ist wchar_t aber scheinbar 32 Bit lang; Platzverschwendung ist mir aber egal). Was sollte man wählen, wenn man seine Applikation möglichst portabel halten will?</p>
<p>MfG</p>
</blockquote>
<p>C++11 kennt zusätzlich std::u16string und std::u32string und Stringliterale für UTF-8/16/32. std::wstring würde ich nicht mehr verwenden.<br />
In UTF-32 wird für ein Zeichen (eigentlich code point) 32 Bit verwendet. Beim Abzählen oder Splitten dürfte das wohl am einfachsten sein, verschwendet aber für &quot;westliche&quot; Sprachen entsprechend viel Platz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235484</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 25 Jul 2012 09:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Wed, 25 Jul 2012 09:22:33 GMT]]></title><description><![CDATA[<p>Konstant bleibend breite Zeichencodes (UCS2/UCS4) sind natürlich schneller verarbeitbar als dynamisch breite Zeichencodes (UTF-8).<br />
Deshalb nutzen Java, NT und OSX intern kein UTF-8.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235487</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 25 Jul 2012 09:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Wed, 25 Jul 2012 09:24:11 GMT]]></title><description><![CDATA[<p>Ich würde std::string benutzen: <a href="http://www.utf8everywhere.org/" rel="nofollow">http://www.utf8everywhere.org/</a></p>
<p>Wenn du es portabel willst, dann nimm auf keinen Fall std::wstring. Willst du wirklich UTF-16 (will man nicht), dann nimm halt std::u16string.</p>
<p>/rant/ schrieb:</p>
<blockquote>
<p>Natürlich hat man mit UTF-16 die gleiche &quot;Problematik&quot;. Ein Zeichen muss nicht in 16 Bit passen. Das ist ja genau meine Frage: Warum hat man bei Java, .NET und diversen Betriebssystemen den Schritt gemacht und gesagt, wir nutzen UTF-16 und nicht UTF-8? Es muss ja irgendeine Motivation gegeben haben. Habe gedacht, man hätte vielleicht gute Gründe gehabt <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=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Das ist historisch bedingt. Früher war Unicode 16 Bit (UCS-2). Aber das hat sich geändert und man musste UTF-16 einführen. Heute würden die sicher lieber UTF-8 nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235489</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 25 Jul 2012 09:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to C++11: wstring oder string benutzen? on Wed, 25 Jul 2012 09:26:21 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Konstant bleibend breite Zeichencodes (UCS2/UCS4) sind natürlich schneller verarbeitbar als dynamisch breite Zeichencodes (UTF-8).<br />
Deshalb nutzen Java, NT und OSX intern kein UTF-8.</p>
</blockquote>
<p>UTF-16 ist auch nicht konstant breit. Das Java/Windows UTF-16 nutzen ist einfach historisch, weil sie früher auf UCS-2 gesetzt haben. Und selbst bei UTF-32 gibt es immer noch Combining Characters. OSX nutzt als Unix-System durchaus UTF-8.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235490</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Wed, 25 Jul 2012 09:26:21 GMT</pubDate></item></channel></rss>