如何将字节偏移量从sqlite FTS查询转换为java中的字符偏移量

时间:2013-12-29 21:22:08

标签: java android string sqlite unicode

我有一个问题,我在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)

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

1 个答案:

答案 0 :(得分:3)

将您的字符串编码回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常见情况。