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

Posted

技术标签:

【中文标题】Android 联系人:不正确的本地化整理/排序【英文标题】:Android contacts: Incorrect localized collation/sorting 【发布时间】:2011-05-13 19:56:10 【问题描述】:

这是我的问题:我正在编写一个替代联系人应用程序,该应用程序指定使用很多不同的语言和字母表。当用我自己的语言瑞典语查询名字时,使用元音变音字符的名字对我来说是不合逻辑的,但我想对 unicode 来说是合乎逻辑的:

应该是/瑞典风格: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 上添加了它作为问题。

【问题讨论】:

您确定设备具有正确的区域设置吗?尝试使用 SQLiteDatabase.setLocale 数据库是由安卓系统管理的,setLocale(Locale l) 不是静态函数。当我在解释文档(2.2)时,整理器 LOCALIZED 应该能够管理这种排序 - 但他们没有任何文档(文档说,需要 XXX 链接!:P) 【参考方案1】:

嘎嘎。看起来是这样的:

在 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,它已被评论者评论。

【讨论】:

以上是关于Android 联系人:不正确的本地化整理/排序的主要内容,如果未能解决你的问题,请参考以下文章

mysql 必知必会整理—全球化与本地化[十六]

Android:联系人列表不按名称排序

在联系人选取器中获取不正确的联系人号码 - Android

“添加联系人”activity.xml 文件在 Android Studio 中的格式不正确

如何在android studio中显示按地址排序的联系人姓名和号码

sh 使用join命令加入两个文件。调整导致不正确排序的本地化问题。