【发布时间】:2012-05-10 07:01:23
【问题描述】:
我使用 Scintilla 并将其编码设置为 utf8(如果我理解正确,这是使其与 Unicode 字符兼容的唯一方法)。有了这个设置,当谈到文本中的 positions 时,Scintilla 表示 byte 位置。
问题是,我在程序的其余部分使用 UnicodeString,当我需要在 Scintilla 编辑器中选择特定范围时,我需要将 UnicodeString 的 char pos 转换为对应的 utf8 字符串中的 byte pos到 UnicodeString。我怎样才能轻松做到这一点?谢谢。
PS,当我找到ByteToCharIndex时,我认为这是我需要的,但是根据它的文档和我的测试结果,它只有在系统使用多字节字符系统(MBCS)时才有效。
【问题讨论】:
-
您确定 ByteToCharIndex 不起作用吗?如果文档的文本早于 Delphi 2009,我不会感到惊讶,当时 AnsiString 更改为带有自己的代码页。现在 AnsiString 包含一个代码页,该函数应该能够判断字符串是编码为 MBCS、SBCS 还是 UTF-8,而不是依赖于系统设置。
-
@RobKennedy - 它不起作用;不仅如此,Windows 函数
CharNextExA也不适用于 UTF8。 -
是的,Serg 确认它不起作用,我也试过了。
标签: delphi delphi-2010