无法在javascript客户端上解码base64字符串
我使用WebSocket将数据从JavaTomcat服务器发送到浏览器。我得到错误:“Uncaught InvalidCharacterError:'atob'失败:要解码的字符串未正确编码。” 这是我的密码: (java服务器代码): 我的base64字符串在java和javascript端看起来像这样:无法在javascript客户端上解码base64字符串,java,javascript,utf-8,websocket,base64,Java,Javascript,Utf 8,Websocket,Base64,我使用WebSocket将数据从JavaTomcat服务器发送到浏览器。我得到错误:“Uncaught InvalidCharacterError:'atob'失败:要解码的字符串未正确编码。” 这是我的密码: (java服务器代码): 我的base64字符串在java和javascript端看起来像这样:[B@74193bd0[B@24a6103c 如果有必要,我正在使用org.glassfish.jersey.internal.util.Base64。我真的很困惑:( 我的base64字符串
[B@74193bd0[B@24a6103c
如果有必要,我正在使用org.glassfish.jersey.internal.util.Base64。我真的很困惑:(
我的base64字符串在java和javascript端看起来像这样:[B@74193bd0[B@24a6103c
这不是base64。这是对两个字节数组调用toString()
的结果的串联。您使用的方法返回的是字节[]
,而不是字符串,这意味着您的字符串串联不合适。您可以使用base64.encodeAsString
-或完全使用不同的base64库(例如).但实际上你不应该做任何字符串连接
您的generateImageString
代码已完全中断。完全不清楚为什么要将整数转换为字符串,获取该字符串的UTF-8表示形式,然后将字节数组转换为base64…然后在循环中执行该操作。这不是获得任何有意义内容的方法
我怀疑您实际上应该以
byte[]
而不是int[]
开始-不清楚这些值是什么-但是您需要调用Base64.encode
,传递byte[]
in.如果调用Integer.toString
或连接Base64数据的位,则操作错误。[B@24a6103c将字节数组表示为字符串,因为Base64.encode返回字节数组
在将字节数组连接到字符串base64Image之前,需要将其转换为字符串
我想你应该这样做:
base64Image += new String(Base64.encode(Integer.toString(imageData[i]).getBytes("UTF8")));
是否可以从int[]到byte[]再到base64字符串,然后在javascript端将其反转?我不知道我离这有多远…@SnockedPancakes:是的,这是完全可能的-但您需要确定如何将
int[]
映射到字节[]
,例如在结尾方面。不,这绝对不是OP应该做的。
function onMessage(evt)
{
base64ImageDataString = evt.data;
imageDataString = window.atob(base64ImageDataString);
}
base64Image += new String(Base64.encode(Integer.toString(imageData[i]).getBytes("UTF8")));