<?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[Brauche iconv erklärung]]></title><description><![CDATA[<p>Hi</p>
<p>Ich kämpfe grade mit iconv.</p>
<pre><code class="language-cpp">// initialize -&gt; convert UTF-8 to UTF-32
iconv_t cd = iconv_open (&quot;UTF-32&quot;, &quot;UTF-8&quot;);

int outsize = 8; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 1; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;a&quot;;
char* output = new char[outsize];
memset (output, 0x00, outsize);

// convert utf8 input to utf32 output
size_t erg = iconv (cd, &amp;input, &amp;inputsize, &amp;output, &amp;outputsize);

// close iconv
iconv_close (cd);

printf (&quot;Inputsize: %d\n&quot;, inputsize);
printf (&quot;Outputsize: %d\n&quot;, outputsize);
printf (&quot;Erg: %d\n&quot;, erg);

// print output (every byte in hex)
for (int i = 0; i &lt; outsize; i++)
{
	printf (&quot;%2X\n&quot;, (unsigned char) output[i]);
}

delete[] output;
</code></pre>
<p>Output ist folgender:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
 0
 0
 0
 0
49
 8
 2
 0
</code></pre>
<p>Ok nun könnte man meinen 4 Nullbytes (Terminierung?) + das &quot;a&quot; in UTF32.<br />
Ist aber nicht so denn schreibe ich statt dem &quot;a&quot; ein &quot;g&quot; oder sonst was, dann bekomme ich den selben output.</p>
<p>Ok -&gt; dann sind die hinteren 4 bytes eben die Terminierung (oder sonst was ka wo die herkommen) und beim umwandeln geht was schief was die ersten 4 Nullbytes erklären würde.</p>
<p>Also Input auf auf 2 Zeichen erhöht -&gt; sollte dann im output ja 8 nullbytes + die 4 undefinierten bytes ergeben.</p>
<pre><code class="language-cpp">int outsize = 12; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 2; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;af&quot;;
char* output = new char[outsize];
</code></pre>
<p>Output:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
49
 8
 2
 0
 0
 0
 0
 0
 0
 0
 0
 0
</code></pre>
<p>Ähm ja -&gt; <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>Dann eben noch ein Test mit 3 Buchstaben</p>
<pre><code class="language-cpp">int outsize = 16; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 3; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;asd&quot;;
char* output = new char[outsize];
memset (output, 0x00, outsize);
</code></pre>
<p>Output:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
 0
 0
 0
 0
41
 8
 2
 0
 0
 0
 0
 0
 0
 0
 0
 0
</code></pre>
<p>WTF</p>
<p>Ich überseh in den 26 Codezeilen sicher grade was triviales nur was?</p>
<p>iconv scheint richtig zu funktionieren (bis auf das outputarray).<br />
Inputsize und outputsize werden korrekt auf 0 decrementiert und die Rückgabe der Funktion ist nicht -1 -&gt; kein Fehler<br />
0 ist sie deshalb weil</p>
<blockquote>
<p>The iconv function returns the number of characters converted in a non-reversible way during this call; reversible conversions are not counted.</p>
</blockquote>
<p><a href="http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html" rel="nofollow">http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html</a><br />
<a href="http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.3.html" rel="nofollow">http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.3.html</a></p>
<p>Weiß wer was ich falsch mache?</p>
<p>Keros</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237756/brauche-iconv-erklärung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 09:33:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237756.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Apr 2009 13:41:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Brauche iconv erklärung on Wed, 01 Apr 2009 13:41:20 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich kämpfe grade mit iconv.</p>
<pre><code class="language-cpp">// initialize -&gt; convert UTF-8 to UTF-32
iconv_t cd = iconv_open (&quot;UTF-32&quot;, &quot;UTF-8&quot;);

int outsize = 8; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 1; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;a&quot;;
char* output = new char[outsize];
memset (output, 0x00, outsize);

// convert utf8 input to utf32 output
size_t erg = iconv (cd, &amp;input, &amp;inputsize, &amp;output, &amp;outputsize);

// close iconv
iconv_close (cd);

printf (&quot;Inputsize: %d\n&quot;, inputsize);
printf (&quot;Outputsize: %d\n&quot;, outputsize);
printf (&quot;Erg: %d\n&quot;, erg);

// print output (every byte in hex)
for (int i = 0; i &lt; outsize; i++)
{
	printf (&quot;%2X\n&quot;, (unsigned char) output[i]);
}

delete[] output;
</code></pre>
<p>Output ist folgender:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
 0
 0
 0
 0
49
 8
 2
 0
</code></pre>
<p>Ok nun könnte man meinen 4 Nullbytes (Terminierung?) + das &quot;a&quot; in UTF32.<br />
Ist aber nicht so denn schreibe ich statt dem &quot;a&quot; ein &quot;g&quot; oder sonst was, dann bekomme ich den selben output.</p>
<p>Ok -&gt; dann sind die hinteren 4 bytes eben die Terminierung (oder sonst was ka wo die herkommen) und beim umwandeln geht was schief was die ersten 4 Nullbytes erklären würde.</p>
<p>Also Input auf auf 2 Zeichen erhöht -&gt; sollte dann im output ja 8 nullbytes + die 4 undefinierten bytes ergeben.</p>
<pre><code class="language-cpp">int outsize = 12; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 2; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;af&quot;;
char* output = new char[outsize];
</code></pre>
<p>Output:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
49
 8
 2
 0
 0
 0
 0
 0
 0
 0
 0
 0
</code></pre>
<p>Ähm ja -&gt; <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>Dann eben noch ein Test mit 3 Buchstaben</p>
<pre><code class="language-cpp">int outsize = 16; // outputsize (1 char = 4 byte + ???  maybe \0 ?)
size_t inputsize = 3; // inputsize
size_t outputsize = outsize;
char* input = (char *) &quot;asd&quot;;
char* output = new char[outsize];
memset (output, 0x00, outsize);
</code></pre>
<p>Output:</p>
<pre><code>Inputsize: 0
Outputsize: 0
Erg: 0
 0
 0
 0
 0
41
 8
 2
 0
 0
 0
 0
 0
 0
 0
 0
 0
</code></pre>
<p>WTF</p>
<p>Ich überseh in den 26 Codezeilen sicher grade was triviales nur was?</p>
<p>iconv scheint richtig zu funktionieren (bis auf das outputarray).<br />
Inputsize und outputsize werden korrekt auf 0 decrementiert und die Rückgabe der Funktion ist nicht -1 -&gt; kein Fehler<br />
0 ist sie deshalb weil</p>
<blockquote>
<p>The iconv function returns the number of characters converted in a non-reversible way during this call; reversible conversions are not counted.</p>
</blockquote>
<p><a href="http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html" rel="nofollow">http://www.gnu.org/software/libiconv/documentation/libiconv/iconv_open.3.html</a><br />
<a href="http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.3.html" rel="nofollow">http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.3.html</a></p>
<p>Weiß wer was ich falsch mache?</p>
<p>Keros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689293</guid><dc:creator><![CDATA[Keros]]></dc:creator><pubDate>Wed, 01 Apr 2009 13:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche iconv erklärung on Thu, 02 Apr 2009 12:38:21 GMT]]></title><description><![CDATA[<p>Habs gefunden. Ich muss mir bevor ich die Funktion aufrufe den output pointer merken oder ihn nach dem Aufruf wieder zurücksetzen.</p>
<p>Hier mal meine convertfunktion</p>
<pre><code class="language-cpp">int Lable_Tag_Write::convertToUTF32 (std::string text, std::vector&lt;unsigned char&gt;* utf32text)
{
	unsigned int textlen = getUTF8Len (text);
	unsigned int outputlen = textlen * 4;

	size_t outputleft = outputlen;
	size_t inputleft = text.length ();

	char input[text.length ()];
	char output[outputlen];
	char* outputshift = output;
	char* inputshift = input;

	memset (output, 0x00, outputlen);
	memcpy (input, text.data (), text.length ());

	// initialize -&gt; convert UTF-8 to UTF-32
	iconv_t cd = iconv_open (&quot;UTF-32BE&quot;, &quot;UTF-8&quot;);
	if (cd == (iconv_t) -1)
	{
		return -1;
	}

	// convert utf8 input to utf32 output
	size_t erg = iconv (cd, &amp;inputshift, &amp;inputleft, &amp;outputshift, &amp;outputleft);
	if (erg == (size_t) -1)
	{
		return -1;
	}

	// close iconv
	iconv_close (cd);

	utf32text-&gt;resize (outputlen, 0x00);
	std::copy (output, output + outputlen, utf32text-&gt;begin ());

	return 0;
}
</code></pre>
<p>Keros</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689862</guid><dc:creator><![CDATA[Keros]]></dc:creator><pubDate>Thu, 02 Apr 2009 12:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Brauche iconv erklärung on Thu, 02 Apr 2009 12:52:32 GMT]]></title><description><![CDATA[<p>Nur so als Tipp vielleicht. <code>iconv</code> ist ja für C gedacht, diese Bibliothek wäre für C++ gedacht:<br />
<a href="http://utfcpp.sourceforge.net/" rel="nofollow">http://utfcpp.sourceforge.net/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1689872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1689872</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Thu, 02 Apr 2009 12:52:32 GMT</pubDate></item></channel></rss>