我是adnroid的新人,我正在使用sqlite查询,但是问题是在我的字符串中使用口音.例如:
>ÁÁÁ
>ááá
>ÀÀÀ
>ààà
> aaa
> AAA
如果我做:
SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%a%' ORDER BY MOVIE_NAME;
回来了
> AAA
> aaa(忽略别人)
但如果我这样做:
SELECT * FROM TB_MOVIE WHERE MOVIE_NAME LIKE '%à%' ORDER BY MOVIE_NAME;
回来了
>ààà(忽略标题“ÀÀÀ”)
通常,sql中的字符串比较由列或表达式COLLATE规则控制.在Android中,只有三个排序规则序列为
pre-defined:BINARY(默认),LOCALIZED和UNICODE.它们都不是您的用例的理想选择,而不安装新的排序规则函数的C API不会暴露在Java API中.
要解决这个问题:
>向表中添加另一列,例如MOVIE_NAME_ASCII
>将值存储在此列中,并删除重音符号.您可以通过将字符串归一化为Unicode Normal Form D(NFD)并删除非ASCII代码点来删除重音符号,因为NFD表示重音字符,大致为ASCII ASCII组合重音符号:
String asciiName = Normalizer.normalize(unicodeName,Normalizer.Form.NFD) .replaceAll("[^\\p{ASCII}]","");