【问题标题】:How to convert the byte offset from sqlite FTS query into a character offset in java如何将sqlite FTS查询中的字节偏移量转换为java中的字符偏移量
【发布时间】:2014-01-16 18:53:58
【问题描述】:

我有一个问题,我在 android 中搜索我的 FTS 表并返回一个字节偏移量:

col     termno      byteoffset      size
1       0           111             4

但问题是,当使用 cursor.getString(colNo) 时,它会为我提供一个 UTF-16 字符串,之后我无法计算出文本的哪个字符是匹配的开始/结束。

Detect character position in an UTF NSString from a byte offset(was SQLite offsets() and encoding problem)类似的问题

但是我无法理解问题中的解决方案。那么在知道字节偏移后,如何准确地知道字符串中的字符偏移(用于突出显示)?

【问题讨论】:

    标签: java android string sqlite unicode


    【解决方案1】:

    将您的字符串编码回 Sqlite 使用的相同编码,然后以字节形式提取您想要的片段并将它们转换回字符串:

    String chars = cursor.getString(colNo);
    byte[] bytes = chars.getBytes("UTF-8");
    String prefix = new String(bytes, 0, byteOffset, "UTF-8");
    String match = new String(bytes, byteOffset, size, "UTF-8");
    int charOffset = prefix.length;
    int charSize = match.length;
    

    (假设您的数据被编码为 UTF-8 字节,这是可能的。)

    不幸的是,您必须进行所有这些冗余编码和解码。可能值得添加优化以缩短纯 ASCII 常见情况。

    【讨论】:

    • 你知道我刚刚想出一模一样的东西,心里想着这有多痛苦。很高兴你提出了同样的建议。
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2012-05-30
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多