java - 无法在我的 JavaScript 客户端上解码我的 Base64 字符串

标签 java javascript utf-8 websocket base64

我正在使用 WebSocket 将数据从 java tomcat 服务器发送到浏览器。我收到错误:“未捕获的 InvalidCharacterError:'atob' 失败:要解码的字符串未正确编码。”

这是我的代码:

(java服务器代码):

public void open(Session session)
{
  String base64ImageString = generateImageString();
  try
  {
     session.getBasicRemote().sendText(base64ImageString);
  }
  catch(IOException e)
  {
    e.printStackTrace();
  }
}

private String generateImageString()
{
  int imageData[] = new int[2];
  imageData[0] = 255;
  imageData[1] = 128;
  String base64Image = "";
  for(int i = 0; i < imageData.length; i++)
  {
    try
    {
      base64Image += Base64.encode(Integer.toString(imageData[i]).getBytes("UTF8"));
      catch (UnsupportedEncodingException e)
    } 
    catch( UnsupportedEncodingException e) 
    {
      e.printStackTrace();
    }
  }
  return base64Image;
}

(JavaScript 代码):

function onMessage(evt)
{
  base64ImageDataString = evt.data;
  imageDataString = window.atob(base64ImageDataString);
}

我的base64字符串在java和javascript端看起来像这样:[B@74193bd0[B@24a6103c

如果重要的话,我正在使用 org.glassfish.jersey.internal.util.Base64 。我真的很困惑:(

最佳答案

My base64 string looks like this on the java and javascript side: [B@74193bd0[B@24a6103c

这不是base64。这是对两个字节数组调用 toString() 的结果的串联。您使用的方法返回 byte[],而不是字符串,这意味着您的字符串连接不合适。您可以使用 Base64.encodeAsString - 或完全使用不同的 base64 库(例如 the iharder one )。但实际上您不应该进行任何字符串连接。

您的generateImageString代码完全损坏。完全不清楚为什么要将整数转换为字符串,获取其 UTF-8 表示形式,然后将字节数组转换为 base64...然后在循环中执行此操作。这不是获得任何有意义的东西的方法。

我怀疑您实际上应该以 byte[] 而不是 int[] 开头 - 目前尚不清楚这些值是什么本来是 - 但你想要对 Base64.encode 进行一次调用,传递 byte[] 。如果你调用 Integer.toString 或连接 Base64 数据位,你做错了。

关于java - 无法在我的 JavaScript 客户端上解码我的 Base64 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535878/

相关文章:

java - 使用几个曲线球在 Swing JTextArea 上强制执行最大字符数

javascript - 如何从日期选择器验证行中的 3 个日期

javascript - promise 困惑

c++ - C++ 中 CString 的字节数

java - 处理域名中的特殊字符(没有 IDN)?

java.lang.NullPointerException : Inflater has been closed On InputStreamReader 异常

java - 发出外部 HTTPS 请求时 AWS Lambda 超时

java - 在 Cucumber java 中找不到步骤定义

javascript - 使用回调在可用时传递消息

Java PreparedStatement UTF-8字符问题