我正在尝试保存我从android设备接收的图像。从Android获取utf-8编码字符串及以下是我用来保存的代码。
String test = java.net.URLDecoder.decode(image_base64, "UTF-8");
byte[] data = Base64.decodeBase64(test.getBytes());
FileOutputStream stream = null;
try {
stream = new FileOutputStream("/var/lib/easy-tomcat7/webapps/test/test1.bmp");
stream.write(data);
stream.flush();
test1 += "success";
}
catch (IOException e)
{
test1 = "failuare";
e.getMessage();
}
finally
{
test1 += "finally";
stream.close();
}
文件正在创建,但它已损坏。我对此做了很多研究,但没有弄清楚它为什么会发生。请帮我解决这个问题。
答案 0 :(得分:2)
我假设您使用Apache Commons Codec中的Base64
。
请注意,您正在处理多种不同类型的编码:
这是完全不同的三件事,你应该了解所有这些事情,以了解究竟发生了什么。
检查从Android设备获取的图像的准确程度。您的代码假设您使用UTF-8字符集将其作为URL编码的Base64数据获取。这确实是Android设备发送数据的方式吗?您必须与编写Android应用程序的人一起检查。
字符串image_base64
包含什么?它是有效的,URL编码的Base64数据吗?
在将字符串传递给getBytes()
之前,您不应该在字符串上调用Base64.decodeBase64
- 这将使用系统的默认字符编码将字符串转换为字节数组。重新运行它。只需这样做:
byte[] data = Base64.decodeBase64(test);
更糟糕的是,Base64编码有多种变体(正如您在维基百科页面上可以看到的Base64)。可能是这样的情况:Android应用程序使用的任何变体都与Base64
类使用的变体不同。
答案 1 :(得分:1)
对getBytes()
也使用编码Base64.decodeBase64(test.getBytes("utf-8"));