如何修复从 websocket 收到的奇怪字符

问题描述

我正在尝试将一个网站连接到我的 Java 插件(在我的世界中),并让它们进行通信和播放音频。当我尝试发送已连接的消息时,我收到奇怪的字符,我该如何解决

���}+��X������R�}

Websocket 代码

      var ws = new WebSocket("ws://62.210.46.135:40050/");

  var url_string = window.location.href;
  var url = new URL(url_string);
  var c = url.searchParams.get("id");

  ws.onopen = function() {
    ws.send("UUID" + c);
    document.getElementById('IDstatus').innerHTML = "Waiting for response!";
    document.getElementById('IDstatus').style.color = "#2f00ff";
    //document.getElementById('IDstatus').style.color = "#03ad11";
  }

  ws.onmessage = function(e) {
    var data = e.data;
    console.log(e);

    if(data.includes("connected")) {
      document.getElementById('IDstatus').innerHTML = "Connected!";
      document.getElementById('IDstatus').style.color = "#03ad11";
    }
  }

  ws.onerror = function(e) {
    document.getElementById('IDstatus').innerHTML = "ERROR!";
    document.getElementById('IDstatus').style.color = "#ff0022";
  }

接收方代码

        while(!AudioClient.getClient().isClosed()) {    
        try {
            Socket client = AudioClient.getClient();
            client.setKeepAlive(true);
            BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
            String info = null;

            if((info = reader.readLine()) != null){
                System.out.println("Received: " + info + "/n");
            }
        } catch (IOException e) {
            e.printstacktrace();
        }
    }

解决方法

任何字节流都将具有隐式编码(它可以只是二进制数据或 base64 编码或 utf8 编码字符或压缩图像等)

  1. 数据接收方使用的解码字符集应与发送方使用的编码字符集相同
  2. 发送者应该在流中发送可显示的字符(编码)以进行可视化表示
  3. 接收器应在机器上安装相应的字形以呈现适当的视觉表示

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...