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