【问题标题】:How to convert string indexes between different encodings?如何在不同编码之间转换字符串索引?
【发布时间】:2015-11-21 11:31:12
【问题描述】:

我正在寻找一种有效的方法来将索引转换为具有一种编码(例如 UTF-16)的字符串到使用不同编码(例如 UTF-8)的另一个字符串。将字符串从一种编码转换为另一种编码是微不足道的。问题只是关于字符串中的索引。

用例:

我有一个专门使用 UTF-8 的后端库,它可以进行一些解析等。这将从 C# 库中使用。我想返回相对于原始字符串的语法错误位置。

【问题讨论】:

  • 我认为除了逐个字符地计算一种编码与另一种编码所占用的字节数之外,没有任何直接的方法。
  • 是的,这也是我目前的想法,但我希望有一些聪明的不同方式来做到这一点。

标签: string unicode encoding utf-8 utf-16


【解决方案1】:

如果不遍历字符串并计算每个字符将转换成多少个代码单元,就无法做到这一点。

但是,如果您要“向上”(UTF-8→UTF-16→UTF-32),您可以采取一些捷径(尽管我不敢声称它们在没有任何基准的情况下效率更高测试):

  • 如果源索引是UTF-8,只需要读取前导字节就可以知道码位的范围。例如,如果您阅读0xF0,您就知道代码点将在U+10000U+10FFFF 之间;因此,它将是 2 个 UTF-16 单元(或 1 个 UTF-32 单元),您可以跳过剩余的 3 个跟踪单元。

  • 如果目标索引是 UTF-32,您可以简单地计算前导单元的数量——一切都变成 1 个 UTF-32 单元。

不过,“向下”(UTF-32→UTF-16→UTF-8)没有这样的快捷方式。

【讨论】:

    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2011-12-06
    相关资源
    最近更新 更多