小编And*_*kus的帖子

如何解码在 4 字节长字符之间的两个缓冲区中分割的 utf8 编码字符串?

UTF8编码中的一个字符最多有4个字节。现在想象一下我从一个流读入一个缓冲区,然后读入另一个缓冲区。不幸的是,恰好在第一个缓冲区的末尾留下了 4 字节 UTF8 编码字符的 2 个字符,而在第二个缓冲区的开头留下了剩余的 2 个字节。

\n

有没有一种方法可以部分解码该字符串(同时保留 2 个剩余字节),而不将这两个缓冲区复制到一个大缓冲区中

\n
string str = "Hello\\u263AWorld";\n\nConsole.WriteLine(str);\nConsole.WriteLine("Length of 'HelloWorld': " + Encoding.UTF8.GetBytes("HelloWorld").Length);\nvar bytes = Encoding.UTF8.GetBytes(str);\nConsole.WriteLine("Length of 'Hello\\u263AWorld': " + bytes.Length);\nConsole.WriteLine(Encoding.UTF8.GetString(bytes, 0, 6));\nConsole.WriteLine(Encoding.UTF8.GetString(bytes, 7, bytes.Length - 7));\n
Run Code Online (Sandbox Code Playgroud)\n

这将返回:

\n
\n

你好\xe2\x98\xbaWorld

\n

“HelloWorld”的长度:10

\n

“Hello\xe2\x98\xbaWorld”的长度:13

\n

你好\xef\xbf\xbd

\n

\xef\xbf\xbdWorld

\n
\n

笑脸的长度为 3 个字节。

\n

是否有一个处理字符串分割解码的类?\n我想先得到“Hello”,然后得到“\xe2\x98\xbaWorld”,重用未编码字节数组的提醒。无需将两个数组复制到一个大数组中。我真的只是想使用第一个缓冲区的提醒并以某种方式让奇迹发生。

\n

c#

4
推荐指数
1
解决办法
2122
查看次数

一次性通用事件调用?

我想要实现的是创建方便的语法,仅在事件上调用一次回调.

public static class Extensions
{
    public static void Once<T>(this EventHandler<T> @event, EventHandler<T> callback)
    {
        EventHandler<T> cb = null;
        cb = (object that, T info) => {
            if (callback != null) {
                callback(that, info);
            }
            @event -= cb;
        };
        @event += cb;
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该允许我们写这样的东西:

obj.OnSomething.Once((sender, obj) => Console.WriteLine(obj));
Run Code Online (Sandbox Code Playgroud)

请注意,OnSomething是某种类型的事件EventHandler.

问题是我收到错误消息:

错误CS0070:事件SharpTox.Core.Tox.OnFriendMessage' can only appear on the left hand side of += or -= when used outside of the type SharpTox.Core.Tox'(CS0070)(SharpTox.Tests)

难道没有办法轻松实现这一目标吗?我是否必须从OnSomething中删除事件并使其成为一个简单的委托?

c#

4
推荐指数
1
解决办法
279
查看次数

标签 统计

c# ×2