<?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[Codierung für Umlaute]]></title><description><![CDATA[<p>Hallo Community,</p>
<p>wie schon im Titel geschrieben, habe ich ein Problem mit der Codierung. Damit ihr das Problem genau versteht, beschreibe ich es im Detail:</p>
<p>Ich habe ein kleines Programm mit GUI in Visual Studio 2012 geschrieben, das mehrere Eingabefelder (TextBoxes) hat. Der Text, den man in die Felder eingibt, ersetzt bestimmte Muster in einer .txt-Datei (oder genauer: der Text wird aus einer Quelldatei eingelesen, darin die Muster ersetzt und das Ganze in die Zieldateien geschrieben). Es funktioniert ohne Probleme für alle Buchstaben, außer Umlauten. Diese werden als komische Symbole angezeigt.</p>
<p>Was ich bis jetzt versucht habe:</p>
<p>- Die Dateien in der UTF-8 Kodierung gespeichert (Quelle und Ziel)<br />
- Verschiedene Texteditoren versucht<br />
- Die wcstombs-Funktion ausprobiert - leider ohne Erfolg<br />
- Die codecvt::do_out-Funktion ausprobiert (ich muss zugeben, die war für mich sehr schwer zu verstehen).</p>
<p>Das Hauptproblem ist, dass ich nicht weiß, von welcher in welche Codierung ich den Text umwandeln muss und an welcher Stelle im Programm der Text verändert wird.</p>
<p>Hier ist ein Stück vom Code, der zeigt, wie die Muster in Dateien ersetzt werden:</p>
<pre><code>while (getline(fin, temp))
{
    pos1 = 0;
    //str1 is the pattern-string
    while ((pos1 = temp.find(str1, pos1)) != string::npos)
    {
        temp.replace(pos1, str1.size(), (context.marshal_as&lt;std::string&gt;(mainField-&gt;Text)));
}
</code></pre>
<p>Und so sieht der Text in der Datei aus, wenn ich &quot;ASDÜÖÄ&quot; eingebe:</p>
<p><a href="http://img2.picload.org/image/oicaldg/unbenannt.png" rel="nofollow">http://img2.picload.org/image/oicaldg/unbenannt.png</a></p>
<p>Ich würde mich um jede Hilfe freuen!</p>
<p>Und danke schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/321679/codierung-für-umlaute</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Jul 2026 06:04:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/321679.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 20 Nov 2013 20:14:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Codierung für Umlaute on Wed, 20 Nov 2013 20:14:18 GMT]]></title><description><![CDATA[<p>Hallo Community,</p>
<p>wie schon im Titel geschrieben, habe ich ein Problem mit der Codierung. Damit ihr das Problem genau versteht, beschreibe ich es im Detail:</p>
<p>Ich habe ein kleines Programm mit GUI in Visual Studio 2012 geschrieben, das mehrere Eingabefelder (TextBoxes) hat. Der Text, den man in die Felder eingibt, ersetzt bestimmte Muster in einer .txt-Datei (oder genauer: der Text wird aus einer Quelldatei eingelesen, darin die Muster ersetzt und das Ganze in die Zieldateien geschrieben). Es funktioniert ohne Probleme für alle Buchstaben, außer Umlauten. Diese werden als komische Symbole angezeigt.</p>
<p>Was ich bis jetzt versucht habe:</p>
<p>- Die Dateien in der UTF-8 Kodierung gespeichert (Quelle und Ziel)<br />
- Verschiedene Texteditoren versucht<br />
- Die wcstombs-Funktion ausprobiert - leider ohne Erfolg<br />
- Die codecvt::do_out-Funktion ausprobiert (ich muss zugeben, die war für mich sehr schwer zu verstehen).</p>
<p>Das Hauptproblem ist, dass ich nicht weiß, von welcher in welche Codierung ich den Text umwandeln muss und an welcher Stelle im Programm der Text verändert wird.</p>
<p>Hier ist ein Stück vom Code, der zeigt, wie die Muster in Dateien ersetzt werden:</p>
<pre><code>while (getline(fin, temp))
{
    pos1 = 0;
    //str1 is the pattern-string
    while ((pos1 = temp.find(str1, pos1)) != string::npos)
    {
        temp.replace(pos1, str1.size(), (context.marshal_as&lt;std::string&gt;(mainField-&gt;Text)));
}
</code></pre>
<p>Und so sieht der Text in der Datei aus, wenn ich &quot;ASDÜÖÄ&quot; eingebe:</p>
<p><a href="http://img2.picload.org/image/oicaldg/unbenannt.png" rel="nofollow">http://img2.picload.org/image/oicaldg/unbenannt.png</a></p>
<p>Ich würde mich um jede Hilfe freuen!</p>
<p>Und danke schonmal im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366668</guid><dc:creator><![CDATA[KakTyc]]></dc:creator><pubDate>Wed, 20 Nov 2013 20:14:18 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Wed, 20 Nov 2013 20:30:22 GMT]]></title><description><![CDATA[<p>Das Problem wird wohl sein, dass std::string nicht UTF-8-aware ist und irgendwo irgendwelche Umwandlungen verkackt werden. <code>marshal_as</code> lässt mich auf .NET schliessen für das GUI; der Text dort wird in UTF-16 codiert. Funktioniert diese Umwandlung wie erwartet? Eventuell musst du dort noch etwas genauer spezifizieren, wie umgewandelt werden soll.</p>
<p>PS: String-Literale sind auch mit Visual C++ 2013 leider immernoch unbrauchbar, werden aber voraussichtlich bald gepatched.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366673</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Wed, 20 Nov 2013 20:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Wed, 20 Nov 2013 20:32:53 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Das Problem wird wohl sein, dass std::string nicht UTF-8-aware ist und irgendwo irgendwelche Umwandlungen verkackt werden.</p>
</blockquote>
<p>std::string ist in der Tat utf-8-aware.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366676</guid><dc:creator><![CDATA[do not blame std string]]></dc:creator><pubDate>Wed, 20 Nov 2013 20:32:53 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Wed, 20 Nov 2013 20:43:04 GMT]]></title><description><![CDATA[<p>KakTyc schrieb:</p>
<blockquote>
<p>Diese werden als komische Symbole angezeigt.</p>
</blockquote>
<p>Wo kommt die Datei her, und wer/was zeigt an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366679</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 20 Nov 2013 20:43:04 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 07:38:52 GMT]]></title><description><![CDATA[<p>Erstmal Danke für die Antworten.</p>
<p><strong>/rant/</strong>, das war auch meine Vermutung. Deswegen habe ich die codecvt::do_out-Funktion ausprobiert. Wie gesagt, ich finde die Funktion sehr kompliziert und unverständlich. Gibt es dazu eine Alternative? Oder könnte mir jemand ein Beispiel zeigen, wie ich meinen String mit codecvt::do_out umwandeln kann?</p>
<p>Ich könnte meinen Code mit codecvt::do_out auch hier einfügen, aber erst heute Abend.</p>
<p><strong>Caligulaminus</strong>, die Datei ist eine ganz normale .txt-Datei, die ich geschrieben habe. Ich öffne diese mit notepad / notepad++. Der Screenshot ist aus Notepad++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366729</guid><dc:creator><![CDATA[KakTyc]]></dc:creator><pubDate>Thu, 21 Nov 2013 07:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 10:52:26 GMT]]></title><description><![CDATA[<p>Von .NET habe ich überhaupt keine Ahnung.</p>
<p>Hilft es zu wissen, daß die MS-debug-CRT frisch allozierten Heap-Speicher mit <code>0xCD</code> füllt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366767</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 21 Nov 2013 10:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 20:38:53 GMT]]></title><description><![CDATA[<p>do not blame std string schrieb:</p>
<blockquote>
<p>std::string ist in der Tat utf-8-aware.</p>
</blockquote>
<p>Kannst du das genauer erklären? Du kannst durchaus UTF-8 im std::string speichern, aber du kannst nicht dessen Methoden benutzen, um den Inhalt irgendwie zu bearbeiten oder zu interpretieren. <code>size()</code> gibt z.B. schlicht die Anzahl Bytes des Strings zurück. <code>at()</code> liefert laut <a href="http://www.cplusplus.com/reference/string/string/at/" rel="nofollow">www.cplusplus.com</a> einen character - aber bei UTF-8 hat man Multibyte Codepoints. Wenn du also einen Iterator benutzt und dich ausserhalb von ANSI bewegst, macht std::string aus deinem UTF-8 in der Regel Hackfleisch.</p>
<p>Methodenaufrufe wie replace ergeben in einem solchen Umfeld gar keinen Sinn mehr, da diese Byte-weise arbeiten. Es wird nicht gerne gesehen, aber du könntest es einmal mit std::wstring probieren. Bei Visual C++ kannst du dort UTF-16 reinwerfen, aber das Problem existiert immernoch wie bei std::string. Nur wirst du vermutlich nichts davon merken, da du kaum Codepoints länger als 2 Bytes benutzt. Vielleicht hilft es ja? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366886</guid><dc:creator><![CDATA[*rant*]]></dc:creator><pubDate>Thu, 21 Nov 2013 20:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 20:53:41 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Wenn du also einen Iterator benutzt und dich ausserhalb von ANSI bewegst, macht std::string aus deinem UTF-8 in der Regel Hackfleisch.</p>
</blockquote>
<p>ANSI =&gt; ASCII</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366890</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Thu, 21 Nov 2013 20:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 20:55:09 GMT]]></title><description><![CDATA[<p>Ich versteh sowieso nicht wieso man die char_traits nicht einfach als Encoding benutzt.<br />
Ein paar Funktionen zum Drüberiterieren, die die nächste Position berechnen, at() rausschmeißen oder komplett umfunktionieren weil beim change ggf. der Buffer wachsen muss und die ganzen find/replace Dinger sollten sowieso außerhalb hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366891</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 21 Nov 2013 20:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Codierung für Umlaute on Thu, 21 Nov 2013 21:13:36 GMT]]></title><description><![CDATA[<p>/rant/ schrieb:</p>
<blockquote>
<p>Du kannst durchaus UTF-8 im std::string speichern, aber du kannst nicht dessen Methoden benutzen, um den Inhalt irgendwie zu bearbeiten oder zu interpretieren.</p>
</blockquote>
<p>Genau das ist die Definition von utf-8-aware. Man kann damit arbeiten.</p>
<blockquote>
<p><code>size()</code> gibt z.B. schlicht die Anzahl Bytes des Strings zurück.</p>
</blockquote>
<p>Was auch die einzige sinnvolle Angabe ist. Dinger wie Anzahl Codepoints sind genauso nutzlos, weil man oft Grapheme meint. Oder eher an der Anzahl Wörter?</p>
<blockquote>
<p><code>at()</code> liefert laut <a href="http://www.cplusplus.com/reference/string/string/at/" rel="nofollow">www.cplusplus.com</a> einen character - aber bei UTF-8 hat man Multibyte Codepoints.</p>
</blockquote>
<p>Kein Problem. Entweder man kann den Character interpretieren (wenn &lt;128) oder eben nicht.</p>
<blockquote>
<p>Wenn du also einen Iterator benutzt und dich ausserhalb von ANSI bewegst, macht std::string aus deinem UTF-8 in der Regel Hackfleisch.</p>
</blockquote>
<p>Kein Problem.</p>
<blockquote>
<p>Methodenaufrufe wie replace ergeben in einem solchen Umfeld gar keinen Sinn mehr, da diese Byte-weise arbeiten.</p>
</blockquote>
<p>Du kannst problemlos hardgecodete ASCII-Zeichenketten ersetzen und du kannst genauso utf-8-std::strings mit anderen utf-8-std::strings ersetzen. Ich sehe das Problem nicht.</p>
<blockquote>
<p>Es wird nicht gerne gesehen, aber du könntest es einmal mit std::wstring probieren.</p>
</blockquote>
<p>UTF-16 ist das schlimmste von allen. wstring gehört deprecated.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2366893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2366893</guid><dc:creator><![CDATA[do not blame std string]]></dc:creator><pubDate>Thu, 21 Nov 2013 21:13:36 GMT</pubDate></item></channel></rss>