Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QCollator doesn't sort in DUCET/CLDR order



  • Good day all,

    I'm attempting to use QCollator to generate and index in the standard DUCET/CDLR order, as given in unicode.org collation chart, but am having no luck, certain characters (eg overline and $) are resolutely sorted incorrectly.

    Here's a tiny bit of test code:

         QCollator collator;
         collator.setLocale(QLocale("en_GB")); // what are the values for collation strategy keys?
         collator.setIgnorePunctuation(false);
    
         QVector<QString> v = {" space [whitespace]", "$ dollar [currency]", "% percent [punctuation]", "2 two [digit]", "1 one [digit]", "‾ overline [punctuation]", "+ plus [symbol]", "< less than [symbol]","# hash [punctuation]"};
         
         std::sort(v.begin(), v.end(), collator);
         qDebug() << v;
    
    

    This produces the following output:

     QVector(" space [whitespace]", "# hash [punctuation]", "$ dollar [currency]", "% percent [punctuation]", "? overline [punctuation]", "+ plus [symbol]", "< less than [symbol]", "1 one [digit]", "2 two [digit]")
    

    but I'm expecting (hoping for) this order:

    QVector(" space [whitespace]", "? overline [punctuation]", "# hash [punctuation]", "% percent [punctuation]", "+ plus [symbol]", "< less than [symbol]", "$ dollar [currency]", "1 one [digit]", "2 two [digit]")
    

    i.e. I'm expecting the ordering specified here: https://unicode.org/charts/collation/

    So the overline character should be the first of the set of punctuation characters
    and the $ character should appear after the [symbols] ... ?

    Any idea what I'm doing wrong?

    Many thanks!


Log in to reply