为什么QString :: localeAwareCompare()无法正常工作 [英] Why isn't QString::localeAwareCompare() working correctly
问题描述
一位芬兰客户告诉我,芬兰语的正确(了解语言环境)排序是:a-z,å,ä,ö.
A Finnish customer tells me that the correct (locale aware) sorting for Finnish is: a-z, å, ä, ö.
但是QString :: localeAwareCompare()在Windows Vista的Qt 4.4.2中将其返回为:a,ä,å,b-o,ö,p-z.
But QString::localeAwareCompare() returns it as: a, ä, å, b-o, ö, p-z in Qt 4.4.2 on Windows Vista.
#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
我的芬兰客户得到了相同的结果.这是错误还是我做错了什么?
My Finnish customer is getting the same result. Is this a bug or am I doing something wrong?
推荐答案
我在Windows XP的Qt 4.6.2中测试了您的代码,这些字符已正确排序.使用您的测试用例,我得到以下输出:
I tested your code in Qt 4.6.2 on Windows XP and those characters are sorted correctly. With your test case I get the following output:
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
作为芬兰人,我可以确认您的客户对芬兰的排序顺序是正确的.
And as a Finnish, I can confirm that your customer is right about the Finnish sorting order.
那么也许您可以升级到新的Qt版本?
So maybe you could upgrade to a new Qt version?
这篇关于为什么QString :: localeAwareCompare()无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!