我正在使用 SearchView 小部件并且它运行良好,除了如果我输入的字符串包含任何非英语字符结果为空,即使很明显有结果
示例:
在上图中,字符串 "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()
只知道如何将 ASCII 字符小写。 LIKE
也只对 ASCII 字符不区分大小写。并且 ñ
不是 ASCII 字符。
对于解决方案,请考虑以下事项:
将另一列添加到您用于搜索的表格中,并将原始列仅用于显示目的。
以规范化形式(例如 NFC)将数据存储在此列中,并将大小写一致地转换为大写/小写。例如:
String stringToStore = Normalizer.normalize(originalString.toLowerCase(), Normalizer.Form.NFC);
在代码中以类似的方式规范化您的搜索字符串。
如果您想忽略口音,例如有 n
也匹配 ñ
,使用 slightly different approach to remove the accents .
关于android - SQLite - 具有非英文字符的查询不显示任何结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131643/