Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Websocket有错误:使用西里尔文而不是英语时,帧必须以空八位字节终止_C#_Websocket_Encoding_Cyrillic - Fatal编程技术网

C# Websocket有错误:使用西里尔文而不是英语时,帧必须以空八位字节终止

C# Websocket有错误:使用西里尔文而不是英语时,帧必须以空八位字节终止,c#,websocket,encoding,cyrillic,C#,Websocket,Encoding,Cyrillic,我在向服务器(JavaSpringBootUTF-8)发送西里尔文(俄语字母)而不是英语字母时遇到问题。下面是我的框架示例。使用英语的一个很好,但是西里尔语有一个错误的计算空八位元。我正在使用websocket csharp net stomp客户端。 我还尝试将带有消息的字符串的编码更改为UTF-8 有效的方法是: 不起作用的: 此处的内容长度(库文本) 内部StompMessage(字符串命令、字符串正文、字典标题) { stompCommand=命令; 身体=身体; nativeHea

我在向服务器(JavaSpringBootUTF-8)发送西里尔文(俄语字母)而不是英语字母时遇到问题。下面是我的框架示例。使用英语的一个很好,但是西里尔语有一个错误的计算空八位元。我正在使用websocket csharp net stomp客户端。 我还尝试将带有消息的字符串的编码更改为UTF-8

有效的方法是:

不起作用的:

此处的内容长度(库文本)

内部StompMessage(字符串命令、字符串正文、字典标题)
{
stompCommand=命令;
身体=身体;
nativeHeaders=标题;
此[“内容长度”]=body.length.ToString();
}
我错过了什么

下面是一个错误示例:

刚刚删除了
此[“内容长度”]=body.length.ToString()并编码为UTF-8

而且效果很好。哇

请回答您的问题,以便添加其他信息而不是发表评论。您可能需要使用编码窗口1251,该窗口使用西里尔字母字符,使用8位而不是16位。因为您使用的是UTF-8,所以必须使用窗口进行编码1251@jdweng你的意思是,我应该尝试对win1251编码的文本进行沙盘处理吗?使用以下命令并确保在支持该字体的查看器中查看结果:Encoding encod1251=Encoding.GetEncoding(“windows-1251”);字符串msg=encod1251.GetString(等字节);
public static string SendMessage(string messageText, string chatID)
    {

        Encoding utf16 = Encoding.GetEncoding("utf-16"); //also tried encode by 1251 instead of utf-16
        Encoding utf8 = Encoding.UTF8;
        byte[] utf8Bytes = utf8.GetBytes(messageText);
        byte[] utf16Bytes = Encoding.Convert(utf8, utf16, utf8Bytes);
        string msg = utf16.GetString(isoBytes);
        
        StompMessageSerializer serializer = new StompMessageSerializer();

        var content = new MessageContent() { text = msg };
        var broad = new StompMessage("SEND", JsonConvert.SerializeObject(content));
        broad["token"] = $"{Global.AuthCompTokenFinal}";
        broad["contentType"] = "application/json"; 
        broad["destination"] = $"/app/send/{chatID}";

        var str = serializer.Serialize(broad);
        Console.WriteLine(str);
        Global.ws.Send(str);
        return str;
    }
internal StompMessage(string command, string body, Dictionary<string, string> headers)
    {
        stompCommand = command;
        Body = body;
        nativeHeaders = headers;

        this["content-length"] = body.Length.ToString();
    }