用于 ScintillaNET 的字节数组到文本

Posted

技术标签:

【中文标题】用于 ScintillaNET 的字节数组到文本【英文标题】:Byte array to text for ScintillaNET 【发布时间】:2012-09-23 23:46:00 【问题描述】:

我正在用 C# 编写一个 Windows 窗体应用程序。该应用程序允许用户从列表框中选择源代码文件,并使用 ScintillaNET 以彩色代码显示它们。这些文件在数据库中保存为字节数组。我已经设法从我的硬​​盘驱动器上的文件转换为字节数组并存储它。用户还应该能够编辑代码,然后将其保存到数据库中,而无需先将文件下载到本地硬盘,我不知道如何处理。

基本上我想从 ScintillNET 控件中保存文本并将其转换为字节数组。 反过来,获取一个字节数组并打印出最初出现在 ScintillaNET 中的文本。

【问题讨论】:

【参考方案1】:

您可以使用 System.Text 中的“编码”类。

System.Text.Encoding.Unicode.GetBytes("Example");

这将返回一个字节数组,其字节相当于使用 unicode 编码的文本“字符串”。还有其他可用的编码,但我建议使用 unicode,因为它支持更多字符(例如,您在 windows charmap 中找到的任何字符)。就我而言,是因为我是拉丁语,某些字母在 UTF 中不可用,我对 ASCII 有疑问。

现在从字节数组转换为字符串使用:

byte[] exampleByteArray = MemStream.ToArray();
System.Text.Encoding.Unicode.GetString(exampleByteArray);

此代码将返回先前保存为内存流中的字节数组的字符串。您可以使用其他方法加载字节数组,在您的情况下,您将从数据库中加载它并调用 System.Text.Encoding.Unicode.GetString()。

【讨论】:

不错的答案。只是一个警告,ScintillaNET 可能需要特定的编码。请务必检查!【参考方案2】:

我相信您正在寻找 System.Text.Encoding 命名空间...

        // a sample string...
        string example = "A string example...";

        // convert string to bytes
        byte[] bytes = Encoding.UTF8.GetBytes(example);

        // convert bytes to string
        string str = System.Text.Encoding.UTF8.GetString(bytes);

【讨论】:

以上是关于用于 ScintillaNET 的字节数组到文本的主要内容,如果未能解决你的问题,请参考以下文章

ScintillaNET 自动完成

保护 ScintillaNet 中的一系列文本:最好的方法是啥?

在 ScintillaNET 控件中实现块注释/取消注释

无法在语法着色之后或之前设置 ScintillaNet 文本样式

ScintillaNet - 计算出用户点击了哪一行

从 ScintillaNet 打印内容时打印行号