iconv Konvertierung von UTF-8 nach UTF-16LE (c++)
Ich muss eine Passworteingabe nach UTF-16LE konvertieren bevor ich einen MD5 digest daraus machen kann. Aber Irgendwie habe ich ein Verständnis Problem was die Zeichenketten Konvertierung betrifft, Ich bekomme einen leeren Ausgabepuffer zurück.
Wo habe ich den hier den Fehler?
PHP-Code:
// Setze zunächst einmal wieder zu einem normalen Unicode-Zeichencode
// Mein System verwendet UTF-8
QTextCodec* codec = QTextCodec::codecForLocale ();
QByteArray realm = codec->toUnicode ( textValue().toAscii() ).toAscii();
// g++4* kompatible
size_t invalid = -1;
// initialisiere iconv
iconv_t cd = iconv_open ( "UTF-16LE", "UTF-8" );
// nehme die bytes von QByteArray
size_t inbytesleft = realm.size();
// convertiere QByteArray nach char*
char* inbuf = realm.data();
// setze den ausgabe Puffer von 8 auf 16 rauf und hänge den term an
size_t outbytesleft = ( realm.size() * 2 ) + 1;
// erstelle den ausgabe Puffer
char* outbuf = new char[outbytesleft];
// starte konvertieren
while ( inbytesleft > 0 )
{
if ( iconv ( cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft ) == invalid )
{
qWarning ( "converting characters failed" );
iconv_close ( cd );
delete[] outbuf;
break;
}
}
iconv_close ( cd );
// Debuggen und das ganze wieder zurück
std::cout << "Größe des Ausgabe Puffers:" << strlen ( outbuf ) << std::endl;
qDebug() << Q_FUNC_INFO << QTextCodec::codecForName ( "UTF-16LE" )->toUnicode ( outbuf );
return realm;