<?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[Unicode und std::*string]]></title><description><![CDATA[<p>Ich weiß, das wurde schoneinmal diskutiert. Aber trotzdem sind die beiden (per Suchfunktion) gefundenen Threads für mich nicht wirklich zufriedenstellend.<br />
Ich bin gerade dabei, ein Karaoke-Programm zu entwerfen. Die Darstellung, das Dateiformat (XML) und die Klassenorganisation sind (bisher) kein Problem, aber wie ich den Text intern speichere bereitet mir Kopfschmerzen. Zuerst dachte ich an UTF-16 mit std::wstring, musste aber feststellen, dass<br />
1. MingWs C++-Lib keine Unterstützung für wstring hat <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="😞"
    /><br />
2. wstring sowieso unpraktikabel für UTF-16 ist</p>
<p>Da ich trotzdem gerne alle Unicode-Zeichen darstellen würde (wenigstens intern, die meisten Fonts werden sowieso nicht alle anzeigen können) und Speicherplatz bei relativ kurzen Songtexten wohl kein Problem ist, dachte ich als nächstes an UTF-32. Das hat ja meines Wissens IMMER 32-Bit pro Zeichen und ist deswegen einfach abzuzählen. <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>
<p>Nur kann die normale string-Klasse ja sowas nicht. Was für Strings sollte man denn verwenden, wenn man möglichst unkompliziert damit arbeiten möchte, am besten mit gewohntem Interface von std::string, und trotzdem alle Unicode-Zeichen speichern möchte? Ich möchte für ein paar chinesische Zeichen keine Verrenkungen machen, weil sie manchmal 2 oder 4 Bytes brauchen, während andere nur 1 Byte brauchen. Und ich möchte möglichst keine nicht-Standard-Bibliotheken verwenden.</p>
<p>Könnte man mit std::basic_string sowas basteln? Oder muss man doch auf fremde Klassen zurückgreifen, die &quot;echten&quot; Unicode unterstützen? <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="😕"
    /><br />
geloescht</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125437/unicode-und-std-string</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 10:44:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125437.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Nov 2005 17:27:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unicode und std::*string on Sun, 06 Nov 2005 17:27:50 GMT]]></title><description><![CDATA[<p>Ich weiß, das wurde schoneinmal diskutiert. Aber trotzdem sind die beiden (per Suchfunktion) gefundenen Threads für mich nicht wirklich zufriedenstellend.<br />
Ich bin gerade dabei, ein Karaoke-Programm zu entwerfen. Die Darstellung, das Dateiformat (XML) und die Klassenorganisation sind (bisher) kein Problem, aber wie ich den Text intern speichere bereitet mir Kopfschmerzen. Zuerst dachte ich an UTF-16 mit std::wstring, musste aber feststellen, dass<br />
1. MingWs C++-Lib keine Unterstützung für wstring hat <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="😞"
    /><br />
2. wstring sowieso unpraktikabel für UTF-16 ist</p>
<p>Da ich trotzdem gerne alle Unicode-Zeichen darstellen würde (wenigstens intern, die meisten Fonts werden sowieso nicht alle anzeigen können) und Speicherplatz bei relativ kurzen Songtexten wohl kein Problem ist, dachte ich als nächstes an UTF-32. Das hat ja meines Wissens IMMER 32-Bit pro Zeichen und ist deswegen einfach abzuzählen. <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>
<p>Nur kann die normale string-Klasse ja sowas nicht. Was für Strings sollte man denn verwenden, wenn man möglichst unkompliziert damit arbeiten möchte, am besten mit gewohntem Interface von std::string, und trotzdem alle Unicode-Zeichen speichern möchte? Ich möchte für ein paar chinesische Zeichen keine Verrenkungen machen, weil sie manchmal 2 oder 4 Bytes brauchen, während andere nur 1 Byte brauchen. Und ich möchte möglichst keine nicht-Standard-Bibliotheken verwenden.</p>
<p>Könnte man mit std::basic_string sowas basteln? Oder muss man doch auf fremde Klassen zurückgreifen, die &quot;echten&quot; Unicode unterstützen? <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="😕"
    /><br />
geloescht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/909731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/909731</guid><dc:creator><![CDATA[geloescht]]></dc:creator><pubDate>Sun, 06 Nov 2005 17:27:50 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 07:56:00 GMT]]></title><description><![CDATA[<p>versuch mal std::wstring (das ist afaik die Unicode-Version von string, hat also auch das selbe Interface, arbeitet jedoch auf wchar_t)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910254</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 Nov 2005 07:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 09:31:51 GMT]]></title><description><![CDATA[<p>@ CStoll er scheint das nicht haben zu wollen <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>geloescht schrieb:</p>
<blockquote>
<p>2. wstring sowieso unpraktikabel für UTF-16 ist</p>
</blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/816">@geloescht</a><br />
Man kann basic_string anpassen, dafür müsstest du std::char_traits für einen unsigned 32-Bit Typen ( uint32_t ) anpassen.<br />
Wenn du ausgaben via streams machen möchtest oder mit streams arbeiten möchtest musst du diese dann auch anpassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910308</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 07 Nov 2005 09:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 09:46:31 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>versuch mal std::wstring (das ist afaik die Unicode-Version von string, hat also auch das selbe Interface, arbeitet jedoch auf wchar_t)</p>
</blockquote>
<p>Ist kein echtes Unicode, leider. Deshalb haben wxWidgets, GTKmm, MFC, Qt usw. alle eine eigene String-Klasse die sich um Unicode kümmert.</p>
<p>wstring reicht einfach nur dafür, um wchar zu speichern, mehr auch nicht. Aber besser als nichts. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/910317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910317</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 07 Nov 2005 09:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 13:41:25 GMT]]></title><description><![CDATA[<p>Streams brauche ich nicht direkt, da das ganze ersteinmal ein Klassenpaket für die Speicherung und Berechnung von Karaoke-Daten werden soll. Die Darstellung (über SDL) soll davon entkoppelt sein.<br />
Leider weiß ich nicht, wie man char_traits benützt, aber ich google gerade ien bisschen rum. Auf deutsch scheint es wenig zu geben, aber ich suche auch mal in den englischen Seiten.<br />
geloescht</p>
<p>EDIT: Für das einlesen brauche ich vielleicht doch Streams... Je nachdem, wie ich das mit dem einlesen von den XML-Dateien mache. libxml2 unterstützt doch Zeichensatzkonvertierung mit iconv, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910552</guid><dc:creator><![CDATA[geloescht]]></dc:creator><pubDate>Mon, 07 Nov 2005 13:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 14:07:31 GMT]]></title><description><![CDATA[<p>Soweit ich weis kann iconv Zeichensätze konvertieren. Ob libxml2 das verwendet weis ich nicht.</p>
<p>char_traits müsstest du selber implementieren. Das enthält die nötige Basisfunktionalität von Strings je nach typ musst es halt anpassen. Bzw kopieren wenn man das so verwenden kann wie es für char oder wchar_t vorgesehen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910586</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Mon, 07 Nov 2005 14:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 15:57:25 GMT]]></title><description><![CDATA[<p>streams brauche ich nicht, libxml2 hat alles was ich brauche. kann man für UCS-4 einfach typedef myString basic_string&lt;uint32_t&gt; machen? falls dem so ist, wäre für mich persönlcih alles geklärt. <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="🙂"
    /><br />
geloeschr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910724</guid><dc:creator><![CDATA[geloescht]]></dc:creator><pubDate>Mon, 07 Nov 2005 15:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Mon, 07 Nov 2005 21:26:55 GMT]]></title><description><![CDATA[<p>du baust dir einfach nen std::basic_string&lt;int,UTF32Traits&gt; string;<br />
die UTF32Traits musste noch selbst zusammenbasteln(have fun). bei utf32 hat string keine probleme, da jedes zeichen gleich viel speicehr belegt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911165</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 07 Nov 2005 21:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Tue, 08 Nov 2005 12:21:00 GMT]]></title><description><![CDATA[<p>Dass UTF-32 immer gleich viel Speicher belegt habe ich ja schon geschrieben. UCS-4 sollte ja gleich sein. Bloß wie ich so ein Traits baue weiß ich nicht.<br />
geloescht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911719</guid><dc:creator><![CDATA[geloescht]]></dc:creator><pubDate>Tue, 08 Nov 2005 12:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Tue, 08 Nov 2005 14:49:19 GMT]]></title><description><![CDATA[<p><a href="http://www.sgi.com/tech/stl/char_traits.html" rel="nofollow">http://www.sgi.com/tech/stl/char_traits.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/911837</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911837</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 08 Nov 2005 14:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Wed, 09 Nov 2005 15:51:22 GMT]]></title><description><![CDATA[<p>Das ist zwar schön und gut, aber ich verstehe trotzdem ncith wies geht. Im Internet finde ich nirgends eine wirkliche Beschreibung, immer nur, wie CHaracter Traits aufgebaut sind, nicht wie man sie programmiert. Ich denke mir, dass das nicht allzu kompliziert ist, aber ich habe trotzdem keine Ahnung.<br />
Das fängt schon hier an:</p>
<blockquote>
<p>Int type<br />
X::int_type<br />
A type that is capable of representing every valid value of type char_type, and, additionally an end-of-file value. For char, for example, the int type may be int, and for wchar_t it may be wint_t.</p>
</blockquote>
<p>Was brauche ich hier für uint32_t (ist dieser name eigentlichtlich standard? ich lese das immer wieder und habe es so übernommen) Vielleicht ein long? Oder gibt es im Unicodestandard vielleicht schon ein EOF? Ich habe ein Zeichen namens &quot;end&quot; gefunden. Welchen Wert hat EOF überhaupt in der Regel?<br />
Gibts denn da nirgends eine Schritt-für-Schritt Erklärung?<br />
geloescht</p>
<p>EDIT und PS: Ich habe eine Seite gefunden, die aufgrund des selben Problems, wie ich habe eine Alternative zu basic_string entwickelt: <a href="http://blogs.msdn.com/ryanmy/archive/category/7606.aspx" rel="nofollow">http://blogs.msdn.com/ryanmy/archive/category/7606.aspx</a><br />
Ich ziehe mir das mal rein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/912724</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/912724</guid><dc:creator><![CDATA[geloescht]]></dc:creator><pubDate>Wed, 09 Nov 2005 15:51:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unicode und std::*string on Wed, 09 Nov 2005 14:19:23 GMT]]></title><description><![CDATA[<p>Es gibt die Anforderung, dass EOF nicht in char_type darstellbar sein darf, sondern nur in int_type. Ansonsten sollen die Standard IOStreams wohl stellenweise merkwürdige Ergebnisse liefern (was ansich auch logisch ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/912795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/912795</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 09 Nov 2005 14:19:23 GMT</pubDate></item></channel></rss>