【问题标题】:"The string to be decoded is not correctly encoded " error when trying to decode Base64 in JS which has been encoded in Java尝试在已用 Java 编码的 JS 中解码 Base64 时出现“要解码的字符串未正确编码”错误
【发布时间】:2019-05-21 11:54:22
【问题描述】:

我在尝试将一些数据从 Java 传递到 JS 时遇到问题。 原始数据的类型为byte[]

在我使用的 Java 端:

byte[] data = some_data;
return Base64.getEncoder().withoutPadding().encodeToString(data)

在我尝试使用的 JS 方面:

atob(b64Data)

当我这样做时,我遇到了该主题的错误:

DOMException: 无法在 'Window' 上执行 'atob': 字符串 解码未正确编码。

注意:删除 .withoutPadding() 会产生相同的结果。

我的问题是,如何返工代码让错误不再出现?

【问题讨论】:

  • 你的问题是什么?
  • 你在 JavaScript 中的b64Data 是什么?当你打印/记录它时你看到了什么?你是怎么收到的?
  • 编码问题?
  • 我正在使用 SockJS 通过 WebSocket 上的 STOMP 发送数据。该数据是具有超过 40M 个字符的 excel 文件的二进制文件。我可以尝试查看文件的开头是否显示了某些内容,但我认为这些数据应该从 Java 服务器“按原样”发送。
  • 你能不能同时编码简单的字符串?您的代码看起来正确,所以问题可能出在数据中(太长)

标签: javascript java websocket stomp sockjs


【解决方案1】:

看来问题出在 Spring 端通过 WebSocket/SockJS 的 STOMP 客户端,而不是编码数据本身。

虽然数据是从带有签名的方法发送的 public String getDataForExcelFile 通过 WebSocket 得到的结果如下所示:

FrameImpl {command, headers, ack, binaryBody, body, (...) } 所以而不是 atob(b64Data)我需要使用atob(b64Data.body)

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2019-07-30
    • 2012-11-13
    • 1970-01-01
    • 2018-01-27
    • 2023-04-04
    • 2021-10-26
    • 2011-10-31
    相关资源
    最近更新 更多