QString IrcDecoder::decode(const QByteArray& data) const { // TODO: not thread safe static QByteArray pluginKey; static bool initialized = false; if (!initialized) { pluginKey = const_cast<IrcDecoder*>(this)->initialize(); initialized = true; } QTextCodec* codec = 0; if (IsUTF8Text(data, data.length())) { codec = QTextCodec::codecForName("UTF-8"); } else { QByteArray name = d.fallback->name(); IrcCodecPlugin* plugin = irc_codec_plugins()->value(pluginKey); if (plugin) name = plugin->codecForData(data); codec = QTextCodec::codecForName(name); } if (!codec) codec = d.fallback; Q_ASSERT(codec); return codec->toUnicode(data); }
QString IrcMessageDecoder::decode(const QByteArray& data, const QByteArray& encoding) const { QTextCodec* codec = 0; if (IsUTF8Text(data, data.length())) { codec = QTextCodec::codecForName("UTF-8"); } else { QByteArray name = codecForData(data); codec = QTextCodec::codecForName(name); } if (!codec) codec = QTextCodec::codecForName(encoding); Q_ASSERT(codec); return codec->toUnicode(data); }