我正在使用SearchView小部件并且效果很好,除非我输入的字符串包含任何非英文字符,结果为空,即使很明显有ARE结果
示例:
在上面显示的图像中,字符串“chu”有两个结果,但如果我输入“ñ”,ListView将不会显示任何结果,而且很明显有结果。
这是我到目前为止所尝试的
public Cursor searchProductByDescription(String description) {
String where = PRODUCT_DESCRIPTION + " LIKE LOWER( ? ) ";
String[] whereArgs = { "%" + description + "%" };
this.openReadableDB();
Cursor cursor = db.query(PRODUCT_TABLE, null, where, whereArgs, null,
null, null);
if (cursor != null) {
cursor.moveToFirst();
}
this.closeDB();
return cursor;
}
我不确定这是与searchview小部件或SQLite相关的问题。 我已经看到了一些问题,他们建议将字符串转换为LOWER o UPPER情况,但这个解决方案对我不起作用。
如果你能在这里帮助我,我真的很感激。 感谢
答案 0 :(得分:2)
LOWER()
只知道如何小写ASCII字符。 LIKE
仅对ASCII字符不区分大小写。 ñ
不是ASCII字符。
要获得解决方案,请考虑以下事项:
在您的表格中添加另一列用于搜索的列,并仅将原始列用于显示目的。
将数据以标准化形式(如NFC)存储在此列中,并将案例一致地转换为大写/小写。例如:
String stringToStore = Normalizer.normalize(originalString.toLowerCase(), Normalizer.Form.NFC);
在代码中以类似方式规范化搜索字符串。
如果你想忽略重音,例如让n
也匹配ñ
,使用slightly different approach to remove the accents。