Scintilla:如何在给定特定字符位置的情况下找到字节位置
Posted
技术标签:
【中文标题】Scintilla:如何在给定特定字符位置的情况下找到字节位置【英文标题】:Scintilla: How do you find the byte position given a specific character position 【发布时间】:2010-12-20 17:30:12 【问题描述】:给定一行上的特定字符索引,例如第 3 行的第 10 个字符,有没有一种简单的方法可以计算 Scintilla 对该字符的“位置”?
使用 ASCII 字符时这很简单,但在使用多字节 UTF-8 字符时我看不到一个简单的方法,其中单个字符可能占据多个字节位置。
【问题讨论】:
【参考方案1】:将行文本转换为 UTF8,然后计算字节位置。如果可以进行多个请求,则缓存转换。
【讨论】:
【参考方案2】:您应该从字符串的开头开始并索引到字符串,但是有多少字节对应于当前位置的字符(以便您现在索引下一个字符),并记录您有多少个字符到目前为止看到。这种线性时间索引是 UTF-8 的缺点之一。也许 Scintilla 已经有能力做到这一点。
【讨论】:
我希望有一个 Scintilla 特定的 API 可以完成我刚刚错过的工作。【参考方案3】:你试过了吗:SCI_FINDCOLUMN
?:SCI_FINDCOLUMN(int line, int column)
此消息返回考虑到制表符宽度的行上列的位置。它将多字节字符视为单个列。列号,如行从 0 开始。
【讨论】:
好主意,但如果文本中包含制表符字符,则不会导致问题并夸大实际位置数。即我可以在样式时使用该列号准确指向文本吗? 我认为您可以在设置文本样式时使用 SCI_FINDCOLUMN,但您可以进行测试,看看是否有效。以上是关于Scintilla:如何在给定特定字符位置的情况下找到字节位置的主要内容,如果未能解决你的问题,请参考以下文章