QString g_sCodec;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) && QT_VERSION >= QT_VERSION_CHECK(4, 0, 0)
QTextCodec* code = QTextCodec::codecForName("GBK");
g_sCodec = "GBK";
if (!code)
{
code = QTextCodec::codecForName("GB18030");
g_sCodec = "GB18030";
if (!code)
{
code = QTextCodec::codecForLocale();
}
}
QTextCodec::setCodecForCStrings(code);
QTextCodec::setCodecForTr(code);
#endif
....
return a.exec();
}
1. const char* 转 QString
static QTextCodec *code = NULL;
QString StrToQStr(const char* s)
{
if ( NULL == code )
{
code = QTextCodec::codecForName("GBK");
if ( NULL == code )
{
code = QTextCodec::codecForName("GB18030");
if (!code)
{
code = QTextCodec::codecForLocale();
if (!code)
return "";
}
}
}
return code->toUnicode( s );
}
2. QString 转 std::string
static QTextCodec *code = NULL;
std::string QStrToStr(const QString& s)
{
if ( NULL == code )
{
code = QTextCodec::codecForName("GBK");
if ( NULL == code )
{
code = QTextCodec::codecForName("GB18030");
if (!code)
{
code = QTextCodec::codecForLocale();
if (!code)
return "";
}
}
}
return code->fromUnicode( s ).data();
}
3. utf-8 转QString
static QTextCodec *uft8code = NULL;
QString Utf8ToQStr(const char* s)
{
if ( NULL == uft8code )
{
uft8code = QTextCodec::codecForName("UTF-8");
if ( NULL == uft8code )
return "";
}
return uft8code->toUnicode( s );
}