QT字符编码


QT字符编码

  1. QTString是Unicode编码

  1. windows下local8Bit是GBK编码

  2. 源码文件是用编码的

    • vs中的cl能识别GBK

    • Mingw中g++识别不带BOM的UTF-8

    • LINUX中g++识别带BOM的UTF-8

  3. 编码转换

    • 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

QString与编码