Android联系人:不正确的本地化排序/排序

时间:2010-11-22 12:46:09

标签: android sqlite localization contacts collation

这是我的问题:我正在编写一个替代联系人应用程序,指定可以使用大量不同的语言和字母表。使用我自己的语言瑞典语查询名称时,使用变音字符的名称以不合逻辑的方式排序给我,但我认为符合逻辑:

应该是/瑞典风格:A,B,C,......,Z,Å,Ä,Ö。

查询结果:A,Å,Ä,B,...,N,O,Ö,P,......

我认为这将是任何偏离拉丁字母的语言中的问题。我所做的所有测试都在模拟器上。我的开发小组正在对框架进行更改,因此也欢迎低级别的答案。

Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
       ContactsContract.Contacts._ID,
       ContactsContract.Contacts.DISPLAY_NAME,
       ContactsContract.Contacts.PHOTO_ID
       };
String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
mCursor = managedQuery(uri, projection, null, null, sortOrder);

更新:我们正在调查此曲目:Sort a String array,TBC ... 我还在Google Code上将其添加为问题。

1 个答案:

答案 0 :(得分:1)

Gaah。它似乎是这样的:

在vanilla Java(SE-1.6)中运行以下代码会生成所需的输出:

String strings[] = {"Åke", "Äskil", "Otto", "Adam", "Örjan", "Palle", "Nisse"};
Locale locale = new Locale("sv", "SE");
Collator collator = java.text.Collator.getInstance(locale);
java.util.Arrays.sort(strings, collator);

但Android中的相同代码对我不起作用。

编辑:我在Android Google Code网站上发布了issue,评论者对此进行了评论。