【问题标题】:SQLite - Queries with non-English characters don't show any resultsSQLite - 非英文字符的查询不显示任何结果
【发布时间】:2014-09-30 23:08:43
【问题描述】:

我正在使用 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 相关的问题。 我见过几个问题,他们建议将字符串转换为小写或大写,但这个解决方案对我不起作用。

如果您能在这里帮助我,我将不胜感激。 谢谢

【问题讨论】:

    标签: android sqlite searchview


    【解决方案1】:

    LOWER() 只知道小写 ASCII 字符。 LIKE 也仅对 ASCII 字符不区分大小写。而ñ 不是 ASCII 字符。

    对于解决方案,请考虑以下几点:

    • 在表格中添加另一列用于搜索,并将原始列仅用于显示目的。

    • 以标准化形式(例如 NFC)将数据存储在此列中,并将大小写一致地转换为大写/小写。例如:

      String stringToStore = Normalizer.normalize(originalString.toLowerCase(), Normalizer.Form.NFC);
      
    • 在代码中类似地标准化您的搜索字符串。

    如果您想忽略重音,例如有n 也匹配ñ,使用slightly different approach to remove the accents

    【讨论】:

    • 非常感谢@laalto,你是救星(Y)
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多