如何使用 Scintilla 处理 Unicode 字符串

Posted

技术标签:

【中文标题】如何使用 Scintilla 处理 Unicode 字符串【英文标题】:How to use Scintilla for Unicode strings 【发布时间】:2013-05-07 09:28:35 【问题描述】:

在使用 scintilla 之前,我使用 SCI_SETCODEPAGE 将代码页设置为 UTF8,但 scintilla 不会将字符串视为 Unicode。我看到一些代码实际上将lparam 数据显式转换为char *

我是否需要做一些额外的设置才能让闪烁体适用于 Unicode 字符串?

【问题讨论】:

UTF8 != Unicode,我认为您需要更清楚地了解您的期望。我不知道 scintilla,但如果您选择了 UTF8,我希望它会转换为 char*。也许你想要 UTF16? 【参考方案1】:

当您说您在使用 Scintilla 时,您的意思是您实际上是在使用 SciTE,基于 Scintilla 文本编辑库的文本编辑器?我使用 SciTE,并将其设置为 UTF-8 编码。这是通过在您的选项文件之一中添加以下属性来完成的:

code.page=65001

例如,只需将其粘贴到选项 -> 打开用户选项文件并保存。

【讨论】:

实际上我有一个应用程序(vc++),它使用 scintilla 在编辑控件中编写文本消息。我的应用程序已通过 scintilla 的代码将代码页设置为 SC_CP_UTF8,并将 Unicode 字符串发送到 scintilla,但 scintilla 没有生成任何输出。 @user2357709 重要的问题是你所说的“unicode 字符串”是什么意思。 哦,好吧,我不太确定你的情况。我自己没有使用过 Scintilla。您确定您使用的是正确的格式,即 SC_CP_UTF8 (65001) 或 SCI_SETCODEPAGE(65001)。你见过documentation吗? 我的应用程序正在维护 TCHAR 格式的字符串。该字符串与 lparam 中的 post 消息一起发送到 scintilla。 Scintilla 支持 utf8 格式的 Unicode。在我的应用程序中,我正在使用 Call(SCI_SETCODEPAGE, SC_CP_UTF8, 0); Call 是指向 scintilla 库中将代码页设置为 SC_CP_UTF8(65001) 的函数的函数指针。这里的问题是 scintilla 没有生成任何字符串。 这里的问题是 scintilla *不生成任何字符串

以上是关于如何使用 Scintilla 处理 Unicode 字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何调用/包装 Scintilla?怀疑

如何在 Windows 上使用 GCC 编译 Scintilla?

Scintilla:如何在给定特定字符位置的情况下找到字节位置

如何在 Windows 窗体 C# 中为文本框设置 Scintilla

如何正确设置 Scintilla 关键字突出显示?

Scintilla.NET 基于正则表达式的语法高亮