android - SQLite - 具有非英文字符的查询不显示任何结果

标签 android sqlite searchview

我正在使用 SearchView 小部件并且它运行良好,除了如果我输入的字符串包含任何非英语字符结果为空,即使很明显有结果

示例:

enter image description here

在上图中,字符串 "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/

相关文章:

android - android中的文本到视觉动画

android - 从 SQLite 中检索单个数据并在 TextView 中显示(Android 开发)

android - SearchView 过滤器与 RecyclerView 过滤结果错误

android - 强制在android中的searchview中写大写

android - 单击 SearchView 时防止 Activity 重新加载

java - 在java中作为android静态java模块打开文件

android - 如何在 flutter 中使用列中的文本时消除文本溢出

android - 如何打印整个 WebView(可滚动)?

android - 防止用户操纵将存储在 Android 本地数据库中的时间?

SQL - 不同类别的列