我正在使用 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/