我应该使用哪个字符集来解码 java 中的这个字节数组?
Which charset should i use to decode this array of bytes in java?
我目前正在使用 Soap 网络服务,更准确地说,是恢复其中发送的文件。
正在手动工作 :
在 SOAPUi 中,我确实收到了这个(为了便于阅读而被截断)
JVBERi0xLjQKJeLjz9MKMTIgMCBvY [...]
dL0luZm8gMTggMCBSL1NpemUgMTk+PgpzdGFydHhyZWYKNjk5OQolJUVPRgo=
我可以将这个字符串粘贴到 notepad++ 中,然后单击 MIME 工具 > base 64 解码,它变成一个正确的 PDF 文件,如下所示(截断,只显示 header)
%PDF-1.4 %xE2xE3xCFxD3LF 12 0 obj <>stream
因此可以毫无问题地读取 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 %âãÏÓ 12 0 obj <>stream
当我试图检查字节数组中的内容时,控制台向我展示了这个:(截断)
% P D F
- 1 . 4
% ? ? ? ?
1 2 0
我假设 windows 或 notepad++ 或 soapui 在后台做一些事情来猜测要使用的字符集,但我不确定要走哪条路。
有人可以告诉我如何在 java 中从头开始(意思是从原始字节数组开始)吗?
此致,
皮埃尔
- 获取原始(Base64)字符串数据
- 使用您喜欢的 Base64 解码器将其转换为字节(其中很多 Java)
- 将字节写入文件。作为字节,而不是作为字符数据(即没有
Writer
class)。
由于在您的示例中您尝试将二进制数据写入字符数据(并使用 String
构造函数),我假设您对 Java?
你的错误是在记事本中将 base64 转换为二进制数据,然后保存结果,认为它是有效的二进制数据(这几乎肯定不是,即使它确实有效,那也不是你的道路想要)。
我目前正在使用 Soap 网络服务,更准确地说,是恢复其中发送的文件。
正在手动工作 :
在 SOAPUi 中,我确实收到了这个(为了便于阅读而被截断)
JVBERi0xLjQKJeLjz9MKMTIgMCBvY [...]
dL0luZm8gMTggMCBSL1NpemUgMTk+PgpzdGFydHhyZWYKNjk5OQolJUVPRgo=
我可以将这个字符串粘贴到 notepad++ 中,然后单击 MIME 工具 > base 64 解码,它变成一个正确的 PDF 文件,如下所示(截断,只显示 header)
%PDF-1.4 %xE2xE3xCFxD3LF 12 0 obj <>stream
因此可以毫无问题地读取 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 %âãÏÓ 12 0 obj <>stream
当我试图检查字节数组中的内容时,控制台向我展示了这个:(截断)
% P D F - 1 . 4
% ? ? ? ?
1 2 0
我假设 windows 或 notepad++ 或 soapui 在后台做一些事情来猜测要使用的字符集,但我不确定要走哪条路。
有人可以告诉我如何在 java 中从头开始(意思是从原始字节数组开始)吗?
此致,
皮埃尔
- 获取原始(Base64)字符串数据
- 使用您喜欢的 Base64 解码器将其转换为字节(其中很多 Java)
- 将字节写入文件。作为字节,而不是作为字符数据(即没有
Writer
class)。
由于在您的示例中您尝试将二进制数据写入字符数据(并使用 String
构造函数),我假设您对 Java?
你的错误是在记事本中将 base64 转换为二进制数据,然后保存结果,认为它是有效的二进制数据(这几乎肯定不是,即使它确实有效,那也不是你的道路想要)。