2014-09-30 64 views
3

我正在使用SearchView小部件,它的效果很好,除了事實上,如果我輸入的字符串包含任何非英文字符結果爲空,即使它是清楚的是結果SQLite - 非英文字符查詢不顯示任何結果

實施例:

enter image description here

在圖像上面顯示有兩個結果的字符串「初」但如果I型「N」 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; 
} 

我不知道這是否是相關的搜索查看小部件或SQLite的一個問題。 我見過幾個問題,他們建議將字符串轉換爲LOWER o UPPER的情況,但這種解決方案對我無效。

我真的很感激,如果你能幫我這裏。 謝謝

回答

2

LOWER()只知道如何小寫ASCII字符。 LIKE也僅對ASCII字符不區分大小寫。而ñ不是一個ASCII字符。

解決的辦法,考慮以下因素:

  • 添加另一列到你使用的搜索,並且只使用原始列爲了顯示你的表。

  • 將數據以標準化格式(例如NFC)存儲在此列中,並將大小寫轉換爲大寫/小寫。例如:

    String stringToStore = Normalizer.normalize(originalString.toLowerCase(), Normalizer.Form.NFC); 
    
  • 在代碼中規範化您的搜索字符串。

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

+1

非常感謝@laalto你是救星(Y) – Axel 2014-10-01 20:51:10