android icu4c sqlite中文笔画排序问题

先讲下代码的流程:

在android中使用database时 ,可以设置database的Locale,也就时数据库的使用区域。

DataBase db;

db.SetLocale(Locale.CHINA);

当设置后按照道理数据库就会自动按你设置的区域的语言进行排序。

设置为CHINA就是拼音,设置位TW,就是笔画。

 

代码的原理:

Java 文件db.SetLocale();函数的实现使用frameworks/base/core/jni android_database_SQliteDatabase.cpp中

的native_setLocale函数。

native_setLocale函数又调用/external/sqlite/android sqlite3_android.cpp中的register_localized_collators()函数来

添加新的排序方法。 

sqlite3_android.cpp中的collate8()函数就是新的排序方法。collate8()函数中使用/external/icu4c/库中的比较方法。

 

icu4c库实现了各个国家和地区的比较方法。有拼音和笔画排序。可以在icu4c/data/coll/zh.txt中看到汉字的排序方法。

有pinyin和stroke. icu4c中Locale是获得地区字串的,Collator是比较方法。.初始化Collator时设置Locale时就设置了比较方法。

之后调用coll_strcoll()方法就可以比较了。

 

但时我在试的过程中设置(Locale.TaiWan)后,汉字的排序方式很奇怪,不是拼音也不是笔画。按我预想的stroke排序方式应该起作用

此问题一直困扰。笔画排序的问题还没有解决。

猜测可能是icu4c库中的中文没有加进去。但是又不知道怎么加。

 

有知道此问题解决方法的人,请告诉我一声。

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值