将解码utf-8字符串转换为文件

时间:2014-12-16 14:00:45

标签: java

我正在尝试保存我从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();
}

文件正在创建,但它已损坏。我对此做了很多研究,但没有弄清楚它为什么会发生。请帮我解决这个问题。

2 个答案:

答案 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"));