Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该使用哪个字符集在java中解码这个字节数组?_Java_Pdf_Utf 8_Character Encoding_Base64 - Fatal编程技术网

我应该使用哪个字符集在java中解码这个字节数组?

我应该使用哪个字符集在java中解码这个字节数组?,java,pdf,utf-8,character-encoding,base64,Java,Pdf,Utf 8,Character Encoding,Base64,我目前正在使用Soap web服务,更准确地说,是恢复在中发送的文件 它正在手动工作: 在SOAPUi中,我确实收到了这个(为了可读性而截断) JVBERi0xLjQKJeLjz9MKMTIgMCBvY[…] dL0luZm8gMTggMCBSL1NpemUgMTk+PgpzdGFydHhyZWYKNjk5OQolJUVPRgo= 我可以在notepad++中粘贴这个字符串,然后单击MIME工具>base 64 Decode,它就会变成一个合适的PDF文件,如下所示(截短,只显示标题) %PDF

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

它正在手动工作

在SOAPUi中,我确实收到了这个(为了可读性而截断)

JVBERi0xLjQKJeLjz9MKMTIgMCBvY[…]
dL0luZm8gMTggMCBSL1NpemUgMTk+PgpzdGFydHhyZWYKNjk5OQolJUVPRgo=

我可以在notepad++中粘贴这个字符串,然后单击MIME工具>base 64 Decode,它就会变成一个合适的PDF文件,如下所示(截短,只显示标题)

%PDF-1.4%xE2xE3xCFxD3LF 12 0 obj流

因此,可以毫无问题地读取PDF文件

现在的问题是使用java恢复此数据。 我正在接收一个字节数组(下面示例中的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%obj流

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

%p D F - 1 . 四,

%

120

我假设windows、notepad++或soapui正在后台做一些事情来猜测该使用什么字符集,但我不确定该怎么做

有人能告诉我如何用java从头开始(意思是从最初的字节数组开始)吗

问候,

皮埃尔

  • 获取原始(Base64)字符串数据
  • 使用您首选的Base64解码器将其转换为字节(Java中有很多字节)
  • 将字节写入文件。作为字节,而不是作为字符数据(即,无
    编写器
    类)
  • 因为在您的示例中,您试图将二进制数据编写为字符数据(并使用
    String
    构造函数),所以我假设您对Java非常陌生

    您的错误是将base64转换为记事本中的二进制数据,然后保存结果,认为它将是有效的二进制数据(这几乎肯定不是,即使它确实有效,也不是您想要的方法)

  • 获取原始(Base64)字符串数据
  • 使用您首选的Base64解码器将其转换为字节(Java中有很多字节)
  • 将字节写入文件。作为字节,而不是作为字符数据(即,无
    编写器
    类)
  • 因为在您的示例中,您试图将二进制数据编写为字符数据(并使用
    String
    构造函数),所以我假设您对Java非常陌生


    您的错误是将base64转换为记事本中的二进制数据,然后保存结果,认为它将是有效的二进制数据(它几乎肯定不是,即使它确实有效,这也不是您想要的方法)。

    如果调试执行,您会得到什么base64字符串?这和你在记事本++中尝试解码的一样吗?如果是,请在获取字节后再次尝试解码。下一步,您可以检查记事本++使用的是哪种编码!如果调试执行,那么Base64字符串会得到什么?这和你在记事本++中尝试解码的一样吗?如果是,请在获取字节后再次尝试解码。下一步,您可以检查记事本++使用的是哪种编码!谢谢你的评论,卡亚曼。关于我犯的错误和我的java技能有待提高,你是对的:)没问题。不同的编码和格式可能会让您感到困惑,因为您以前从未见过它们。特别是字符集编码。谢谢你的评论Kayaman。关于我犯的错误和我的java技能有待提高,你是对的:)没问题。不同的编码和格式可能会让您感到困惑,因为您以前从未见过它们。特别是字符集编码。