如何解决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下面了。
方法一:修改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下面了。
展开全部
以多音字曾为例,作为姓氏是读作Zeng,而android中却按Ceng来对其排序。
方法一:修改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
方法一:修改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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询