我应该使用哪个charset来解码java中的这个字节数组?

时间:2015-08-04 08:29:54

标签: java pdf utf-8 character-encoding base64

我目前正在使用Soap Web服务,更准确地说,是恢复在其中发送的文件。

手动

在SOAPUi中,我确实收到了这个(为了便于阅读而被截断)

  

JVBERi0xLjQKJeLjz9MKMTIgMCBVY [...]
  dL0luZm8gMTggMCBSL1NpemUgMTk + PgpzdGFydHhyZWYKNjk5OQolJUVPRgo =

我可以在notepad ++中粘贴此字符串,然后点击MIME Tools> base 64 Decode,它成为一个正确的PDF文件如下(截断,只显示标题)

  

%PDF-1.4%xE2xE3xCFxD3LF 12 0 obj<> stream

可以毫无问题地阅读PDF文件。

问题现在使用java恢复此数据。 我收到一个byte数组(下面的示例中的acopier变量)并使用以下代码存储到文件中。 我尝试了在网上找到的众多例子中没有任何成功。

还尝试使用UTF-8,ISO-8859-1等。

OutputStreamWriter osw = null;
    try{
    String filePath="c:\\temp\\";
    filePath = filePath.concat("test.pdf");
    FileOutputStream fos = new FileOutputStream(filePath,false);
    osw = new OutputStreamWriter(fos,"UTF-8");
    osw.write("\uFEFF");
    osw.write(new String(acopier));
    osw.close();
    System.out.println("Success");
    fos.close();
    }
    catch(Exception e)
    {
    System.out.println(e.getMessage());
    osw.close();
    }

不幸的是,文件不能被视为pdf文件,

  

%PDF-1.4%ãÏÓ120 ob​​j<> stream

当我试图检查字节数组中的内容时,控制台向我显示:(截断)

  

%P D F.    - 1。 4

     

%? ? ? ?

     

1 2 0

我认为windows或记事本++或者soapui在后台做了一些事情来猜测要使用什么字符集,但我不知道哪种方式可以去。

可以请某人澄清我如何从头开始在java中进行(意味着从原始的字节数组开始)?

此致

皮尔

1 个答案:

答案 0 :(得分:6)

  1. 获取原始(Base64)字符串数据
  2. 使用您首选的Base64解码器将其转换为字节(大量用于Java)
  3. 将字节写入文件。作为字节,而不是字符数据(即没有min类)。
  4. 因为在你的例子中你试图将二进制数据写为字符数据(并使用Writer构造函数),我认为你是Java的新手?

    你的错误是在记事本中将base64转换为二进制数据,然后保存结果,认为它将是有效的二进制数据(几乎绝对不是,即使它确实有效,这不是你想要的道路)。