给定一行上的特定字符索引,例如第 3 行上的第 10 个字符,是否有一种简单的方法来计算 Scintilla 对该字符的“位置”?
使用 ASCII 字符时这很简单,但在使用多字节 UTF-8 字符时我看不到一种简单的方法,其中单个字符可能占用多个字节位置。
将行文本转换为 UTF8,然后计算字节位置。如果可以进行多个请求,则缓存转换。
您应该从字符串的开头开始并索引到字符串,但是有多少字节对应于当前位置的字符(以便您现在索引下一个字符),并记录到目前为止您看到的字符数. 这种线性时间索引是 UTF-8 的缺点之一。也许 Scintilla 已经有能力做到这一点。
您是否尝试过:SCI_FINDCOLUMN
?:
SCI_FINDCOLUMN(int line, int column)
此消息返回列在行上的位置,并考虑了制表符的宽度。它将多字节字符视为单个列。列号,如行从 0 开始。