如何解决Contacts中的多音字排序错误问题

 我来答
忆如往昔HSty
2016-09-30 · 超过212用户采纳过TA的回答
知道小有建树答主
回答量:591
采纳率:0%
帮助的人:411万
展开全部
 解决Contacts中的多音字排序错误问题方法:

  方法一:修改base中external/icu4c/data/coll/zh.txt文件

  拼音的排序都放在了pinyin数组中。以曾为例,被放到了C后面,只需把他移动到Z后面就可以了。

  方法二:在汉字转化为拼音时进行干预

  汉字转化为拼音是由HanziToPinyin.java来完成的。该类的getToken函数中定义了一个局部变量offset。

  经过与UNIHANS数组的一系列比较之后,将为该变量进行赋值,而这个值决定了这个汉字对应的拼音是什么(取PINYINS数组中offset位置的拼音)。

  所以,如果拼音错了,肯定是这个offset的值有错误。

  如果想纠正多音字的排序问题,只需给offset重新赋值即可。

  同样以曾为例。

  在getToken函数中做如下修改:

  if (cmp < 0) {
  offset--;
  }
  if (character== '\u66fe' && offset != 379) {
  Log.e("gaojx", "HanziToPinyin-->getToken()-->reset offset to 379 !!!!!");
  offset = 379;
  }
  Log.w("gaojx", "HanziToPinyin-->getToken()-->offset : " + offset);
  StringBuilder pinyin = new StringBuilder();
  for (int j = 0; j < PINYINS[offset].length && PINYINS[offset][j] != 0; j++) {
  pinyin.append((char) PINYINS[offset][j]);
  }

  注:\u66fe是曾的Unicode编码,379是拼音ZENG对应的offset

  这样,Contacts在给姓氏曾排序的时候将不会放在C下面,而是放在Z下面了。

  如何简单而快速的确定一个汉字的拼音在PINYINS数组的offset:

  答:在源文件中打印offset的值,创建联系人是使用该汉字作为姓名,即可打印出该汉字对应的offset了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式