将存储在数据库中的拉丁文unicode字符转换为相当于英文字母的字母

dbw*_*dbw 3 java sqlite unicode

我正在创建一个搜索实用程序,它将搜索SQLITE数据库中的元素.唯一的问题是,数据库包含一些字符,如Åèô,它们在拉丁语中...

是否有一种简单的方法可以忽略这些字母并将它们视为英文字母对应物(Å= A,è= e ...)?

我想过设计所有这些字符的1对1映射,比如

    HashMap<Character, Character> lstOfChar = new HashMap<Character, Character>();
    lstOfChar.put('Å', 'A');
    lstOfChar.put('è', 'e');
Run Code Online (Sandbox Code Playgroud)

并且当从数据库检索数据时,每个这样的字符将被替换为等效的英语字母并且将显示搜索结果.

如果我搜索Deepak然后将包含行DeepÅkDÈepakdeepÃk应搜索

但这将是漫长的过程和维护也将是艰难的.

是否有一些优雅的方式,可能是SQLITE提供一些功能或者是否可能通过SQL.
我正在使用Java平台.

编辑我发现在发布的答案中Normalizer确实有助于在获取结果之后执行程序化的事情,但这可以通过database或通过SQL以某种特殊方式触发来完成,因为它需要大量时间来获取结果并应用此函数并返回结果.

ast*_*asr 5

你在找Normalizer.它允许您在重音的Unicode字符及其分解之间进行映射:

Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll(
    "\\p{InCombiningDiacriticalMarks}+", "");
Run Code Online (Sandbox Code Playgroud)

我建议你事先这样做,因为它很贵,并把它放在"name_search"专栏或类似的东西中.值得注意的是,这不会捕获所有非"英文"字母,因为它们并不总是有分解,但是é和Â等基础知识将会匹配.

关于你的编辑:正如我所说,最好的方法是将转换应用到所有行,并将结果放在一个名为"name_search"的附加数据库列中.它类似于在表上创建索引.在SQL中没有与Normalizer的功能相同的功能,虽然有些RDBMS系统可能提供一个,但SQLite肯定不会.