QT字符编码
-
QTString是Unicode编码
-
windows下local8Bit是GBK编码
-
源码文件是用编码的
-
vs中的cl能识别GBK
-
Mingw中g++识别不带BOM的UTF-8
-
LINUX中g++识别带BOM的UTF-8
-
-
编码转换
-
QTextCodec:
-
-
非Unicode编码转换成Unicode,Unicode转换成非Unicode
-
-
-
支持的编码:
-
-
-
Big5 Big5-HKSCS CP949 EUC-JP EUC-KR GB18030 HP-ROMAN8 IBM 850 IBM 866 IBM 874 ISO 2022-JP ISO 8859-1 to 10 ISO 8859-13 to 16 Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml KOI8-R KOI8-U Macintosh Shift-JIS TIS-620 TSCII UTF-8 UTF-16 UTF-16BE UTF-16LE UTF-32 UTF-32BE UTF-32LE Windows-1250 to 1258
-
-
-
QByteArray encodeString = "俄语字符编码...";
QTextCodec * codec = QTextCodec::codecForName("KOI8-R");
QString unicodeStr = codec->toUnicode(encodestring); -
QString strDefUnicode = "俄语";
QTextCodec * codec = QTextCodec::codecForName("KOI8-R");
QByteArray encodeString = codec->fromUnicode(strDefUnicode);
-
-
编译器或数据库中字符的编码转换
-
QString GBK2UTF8(const QString &str)
{
QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");
return utf8->toUnicode(str.toUtf8());
}
//str: unicode解析字符编码,但是存储的确是utf8
UTF8TOGBK(const QString &str)
{
QTextCodec *gbk = QTextCodec::codecForName("GB18030");
//str除了Unicode,可转任意字符编码,转gbk,是因为QTextCodec gbk 只能从gbk转Unicode
return gbk->toUnicode(str.toLocal8Bit());
}
//str:保存的是GBK编码字符串
std::string GBK2UTF8(std::string &str)
{
QString temp = QString::fromLocal8Bit(str.c_str());
std::string ret = temp.toUtf8().data();
}
std::string UTF82GBK(std::string &str)
{
QString temp = QString::fromUtf8(str.c_str());
std::string ret = temp.toLocal8Bit().data();
return ret;
}
QTextCodec::setCodecForCString(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCString(QTextCodec::codecForName("UTF-8"));
单QString 只提供了这几个成员函数,远远满足不了大家的需求,比如,在简体中文Windows下,local8Bit是GBK,可是有一个char串是 BIG5 或 Latin-2怎么办?
那就动用强大的QTextCodec吧,首先QTextCodec肯定知道自己所负责的编码的,然后你把一个char串送给它,它就能正确将其转成Unicode了。
QString QTextCodec::toUnicode ( const char * chars ) const