Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-141463

QString::localeAwareCompare() incorrect for ÅÄÖ in Swedish locale

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Out of scope
    • Icon: Not Evaluated Not Evaluated
    • None
    • 5.15.19, 6.7.3, 6.10.0
    • None
    • macOS, Windows

      This code:

       

      #include <QCoreApplication>
      #include <QLocale>
      #include <QCollator>
      #include <QtDebug>
      int main( int argc, char* argv[] )
      {
          QCoreApplication app( argc, argv );
          QLocale::setDefault( QLocale::Swedish );
          QString s1 = "a";
          QString s2 = "b";
          QString s3 = "o";
          QString s4 = "z";
          QString s5 = "å";
          QString s6 = "ä";
          QString s7 = "ö";
          qDebug() << "s1=" << s1;
          qDebug() << "s2=" << s2;
          qDebug() << "s3=" << s3;
          qDebug() << "s4=" << s4;
          qDebug() << "s5=" << s5;
          qDebug() << "s6=" << s6;
          qDebug() << "s7=" << s7;
          qDebug() << "QString::localeAwareCompare( s1, s2 )=" << QString::localeAwareCompare( s1, s2 );
          qDebug() << "QString::localeAwareCompare( s2, s3 )=" << QString::localeAwareCompare( s2, s3 );
          qDebug() << "QString::localeAwareCompare( s3, s4 )=" << QString::localeAwareCompare( s3, s4 );
          qDebug() << "QString::localeAwareCompare( s4, s5 )=" << QString::localeAwareCompare( s4, s5 );
          qDebug() << "QString::localeAwareCompare( s5, s6 )=" << QString::localeAwareCompare( s5, s6 );
          qDebug() << "QString::localeAwareCompare( s6, s7 )=" << QString::localeAwareCompare( s6, s7 );
          return app.exec();
      }
      

       

       

      Returns on Windows (Qt 5 and 6):

      s1= "a"
      s2= "b"
      s3= "o"
      s4= "z"
      s5= "å"
      s6= "ä"
      s7= "ö"
      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( s6, s7 )= -1

      And returns on Mac (Qt 5 and 6):

      s1= "a"
      s2= "b"
      s3= "o"
      s4= "z"
      s5= "å"
      s6= "ä"
      s7= "ö"
      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( s6, s7 )= -1

      -1 should be return in all cases, as the correct order is:

      a to z,å,ä,ö

      Note that Windows and Mac output are not the same!

      This code:

          QCollator collator(QLocale::Swedish);
          QStringList list = {s7, s1, s2, s3, s4, s5, s6 };
          std::sort(list.begin(), list.end(), collator);
          qDebug() << "list=" << list;

      returns the expected sort order on both Windows and Mac:

      list= ("a", "b", "o", "z", "å", "ä", "ö")

       

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            thiago Thiago Macieira
            oryxdigital Andy Brice
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes