Websocket having Error: Frame must be terminated with a null octet while using Cyrillic instead of english

Viewed 206

I am having a problem with sending a cyrillic (russian letters) instead of english ones to server(java spring boot utf-8). Here are my frames examples below. The one with english works fine, but cyrillic have a wrong calculating null octet. I am using websocket-csharp-net-stomp-client for it. I have also tried to change encoding of the string with message to UTF-8

The one that works:

enter image description here

The one that does not work:

enter image description here

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;
    }

content length is getting here (library text)

internal StompMessage(string command, string body, Dictionary<string, string> headers)
    {
        stompCommand = command;
        Body = body;
        nativeHeaders = headers;

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

What am I missing here?

Here is an error example: Here is an error example

1 Answers

Just deleted this["content-length"] = body.Length.ToString(); and encoding to UTF-8 and it works fine . Wow

Related