• qt中的toUtf8, toLatin1, Local8bit, toUcs4(转)


    转自:https://blog.csdn.net/u010607621/article/details/50321915

    1 首先说下字符集。

    gb18030字符集兼容了gbk字符集,以两个字节表示一个文字。windows系统可能使用的就是这两种的一种。

    unicode字符集以2个或以上的字节表示一个汉字。

    通用字符集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的标准字符集。UCS-2用两个字节编码,UCS-4用4个字节编码。

    utf8字符集以2个或以上的字节表示一个汉字。实际上具体的数值和unicode有很大的相关性。

    ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF。亦称为Latin1。

    2 QString内部可能是使用unicode字符集来存储文字。具体输出的时候,就可以输出该文字对应的unicode, ucs4, utf8, gb18030的编码。

    3 代码示例
    使用qtcreator创建main.cpp,它默认代码里的汉字使用utf8字符集。不要使用msvc编译器,因为它默认汉字使用gb18030字符集

    #include <QCoreApplication>
    #include <QDebug>
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QString tmp="汉字";
        qDebug() << "tmp=" << tmp << endl;
        qDebug() << "toUtf8" << tmp.toUtf8() << endl;       //返回utf8编码的一串数字
        qDebug() << "toLatin1" << tmp.toLatin1() << endl;   //"汉字"不在latin1字符集中,所以结果无意义(为??)
        char *p = new char[1+strlen(tmp.toLatin1().data())];
        strcpy(p, tmp.toLatin1().data());
        for (int i=0; p[i] != ''; i++)
        {
            printf("0x%02x ", p[i]);
        }
        printf("
    ");
        delete p;
        qDebug() << "toLocal8bit" << tmp.toLocal8Bit() << endl;//返回windows操作系统设置的字符集gb18030的编码.解决中文乱码的一种方式:myBtn->setTesxt(QString::fromLocal8Bit("中文");
        qDebug() << "toUcs4" << tmp.toUcs4() << endl; //返回ucs4编码组成的QVector,一个汉字占用4字节 return a.exec(); }
  • 相关阅读:
    Thoughtworks的技术雷达
    Stackdump: 一个可以离线看stackoverflow的工具
    我最喜欢的visual studio 2013的新特性
    把用octopress最新发布的博文同步到提供metaweblog API的博客(例如博客园)上
    博客搬家到 http://fresky.github.io/
    runnable:在线IDE+代码片段分享
    用LINQPad加上Tx驱动来分析log
    编码规范
    数论欧几里德定理的运用
    uva 11806 容斥原理+dfs
  • 原文地址:https://www.cnblogs.com/Stephen-Qin/p/13387774.html
Copyright © 2020-2023  润新知