我正在尝试构建一组用于解码和修改多字节 utf-8 字符串的辅助函数。例如,查找字符串中的字符数量,以及查找特定字符的字节偏移量。
我一直在寻找解决方案,但一直无法弄清楚。如果有人可以向我展示仅使用 STL 的跨平台和可移植方式,我将不胜感激。此外,如果有 c++11 方法可以做到这一点,我也对此持开放态度。
您应该阅读和研究有关 UTF-8 的维基百科页面,那里清楚地描述了编码L https://en.wikipedia.org/wiki/UTF-8
要解码 UTF-8,请读取第一个字节,这应该告诉您有多少后续字节构成该字符。然后读入许多其他字节,连接“数据”位,您将获得代码点编号。
如果您这样做直到到达字符串的末尾,这允许您计算字符串中有多少个代码点。
如果您这样做直到达到某个代码点索引,您将知道该代码点索引的字节偏移量。
我认为除了基本的std::string::const_iterator
.
至于非标准库,我强烈建议使用ICU之类的 unicode 库,或者不要自己编写代码。如果你小心的话,.Net 库有点工作,但我认为 Windows 没有任何其他 API 可以帮助解决这个问题。