代码之家  ›  专栏  ›  技术社区  ›  Andy Brice

为什么QString::localeAwareCompare()不能正常工作

  •  2
  • Andy Brice  · 技术社区  · 14 年前

    一位芬兰客户告诉我,芬兰语的正确排序是:A-z,·。

    但是在WindowsVista上的Qt4.4.2中,QString::localeAwareCompare()将其返回为:a、?b-o、p-z。

    #include <qapplication.h>
    #include <qlocale.h>
    #include <iostream>
    #include <tchar.h>
    
    int
    main( int argc, char* argv[] )
    {
        QLocale::setDefault ( QLocale( QLocale::Finnish ) );
    
        QApplication app( argc, argv );    
    
        QString s1 = "a";
        QString s2 = "ä";
        QString s3 = "Ã¥";
        QString s4 = "b";
        QString s5 = "o";
        QString s6 = "ö";
        QString s7 = "z";
    
        std::cout << "QString::localeAwareCompare( s1, s2 )=" << QString::localeAwareCompare( s1, s2 ) << "\n";
        std::cout << "QString::localeAwareCompare( s2, s3 )=" << QString::localeAwareCompare( s2, s3 ) << "\n";
        std::cout << "QString::localeAwareCompare( s3, s4 )=" << QString::localeAwareCompare( s3, s4 ) << "\n";
        std::cout << "QString::localeAwareCompare( s4, s5 )=" << QString::localeAwareCompare( s4, s5 ) << "\n";
        std::cout << "QString::localeAwareCompare( s5, s6 )=" << QString::localeAwareCompare( s5, s6 ) << "\n";
        std::cout << "QString::localeAwareCompare( s5, s6 )=" << QString::localeAwareCompare( s6, s7 ) << "\n";
    
        return app.exec();
    }
    

    输出:

    QString::localeAwareCompare( s1, s2 )=-1
    QString::localeAwareCompare( s2, s3 )=-1
    QString::localeAwareCompare( s3, s4 )=-1
    QString::localeAwareCompare( s4, s5 )=-1
    QString::localeAwareCompare( s5, s6 )=-1
    QString::localeAwareCompare( s5, s6 )=-1
    

    1 回复  |  直到 14 年前
        1
  •  3
  •   user362638 user362638    14 年前

    我在WindowsXP上的Qt4.6.2中测试了您的代码,这些字符的排序是正确的。通过您的测试用例,我得到以下输出:

    QString::localeAwareCompare( s1, s2 )=-1
    QString::localeAwareCompare( s2, s3 )=1
    QString::localeAwareCompare( s3, s4 )=1
    QString::localeAwareCompare( s4, s5 )=-1
    QString::localeAwareCompare( s5, s6 )=-1
    QString::localeAwareCompare( s5, s6 )=1
    

    作为一个芬兰人,我可以确认你的客户对芬兰分拣订单的看法是正确的。