【问题标题】:Scintilla: How do you find the byte position given a specific character positionScintilla:如何在给定特定字符位置的情况下找到字节位置
【发布时间】:2010-12-20 17:30:12
【问题描述】:

给定一行上的特定字符索引,例如第 3 行的第 10 个字符,有没有一种简单的方法可以计算 Scintilla 对该字符的“位置”?

使用 ASCII 字符时这很简单,但在使用多字节 UTF-8 字符时我看不到一个简单的方法,其中单个字符可能占据多个字节位置。

【问题讨论】:

    标签: c++ scintilla


    【解决方案1】:

    将行文本转换为 UTF8,然后计算字节位置。如果可以进行多个请求,则缓存转换。

    【讨论】:

      【解决方案2】:

      您应该从字符串的开头开始并索引到字符串,但是有多少字节对应于当前位置的字符(以便您现在索引下一个字符),并记录您有多少个字符到目前为止看到。这种线性时间索引是 UTF-8 的缺点之一。也许 Scintilla 已经有能力做到这一点。

      【讨论】:

      • 我希望有一个 Scintilla 特定的 API 可以完成我刚刚错过的工作。
      【解决方案3】:

      你试过了吗:SCI_FINDCOLUMN ?:
      SCI_FINDCOLUMN(int line, int column)
      此消息返回考虑到制表符宽度的行上列的位置。它将多字节字符视为单个列。列号,如行从 0 开始。

      【讨论】:

      • 好主意,但如果文本中包含制表符字符,则不会导致问题并夸大实际位置数。即我可以在样式时使用该列号准确指向文本吗?
      • 我认为您可以在设置文本样式时使用 SCI_FINDCOLUMN,但您可以进行测试,看看是否有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多