【问题标题】:Consume a c# base64 encoded file in java在 java 中使用 c# base64 编码文件
【发布时间】:2015-07-09 22:22:13
【问题描述】:

我想将文件从 C# 传输到接受 base64 字符串的 java webservice。问题是,当我使用 c# Convert 类对文件进行编码时,它会生成一个基于 little endian unsigned byte[] 的字符串。

在 Java 中 byte[] 是有符号的/大端的。当我解码交付的字符串时,我得到一个不同的字节 [],因此文件已损坏。

如何将 C# 中的 byte[] 编码为 base64,它等于使用相同字符串在 java 中解码的 byte[]?

C#端:

byte[] attachment = File.ReadAllBytes(@"c:\temp\test.pdf");
String attachmentBase64 = Convert.ToBase64String(attachment, Base64FormattingOptions.None);

Java端:

  @POST
  @Path("/localpdf")
  @Consumes("text/xml")
  @Produces("text/xml")
  public String getExtractedDataFromEncodedPdf(@FormParam("file") String base64String) {

      if(base64String == null) return null;


      byte[] data = Base64.decodeBase64(base64String.getBytes());

      FileOutputStream ms;
    try {
        ms = new FileOutputStream(new File("C:\\Temp\\test1234.pdf"));
        ms.write(data);
        ms.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

文件 test1234.pdf 已损坏。

【问题讨论】:

标签: java c# base64 interop endianness


【解决方案1】:

“签名”和“大端”是非常不同的东西,我相信你自己也很困惑。

是的,字节在 Java 中是有符号的,而在 C# 中是无符号的——但我强烈怀疑你在这两种情况下得到的实际位是相同的……只是(比如)11111111 的位模式在 C# 中表示 255 和 - 1 在 Java 中。除非您将字节视为数字(这很少有用),否则这无关紧要 - 如果您只是使用字节在 Java 端写出文件,那当然没关系。

【讨论】:

  • 感谢您的澄清。我所做的是将 C# 中的 PDF 转换为 base64 字符串。然后将其发送到 web 服务,在那里将其解码为 byte[] 并将其写入磁盘。该文件已损坏,我认为这是因为字节“看起来”不同。所以,你说这不是原因。你能想象问题是什么吗?
  • 我已经用文本文件检查过了,它们不是问题。
  • @Stefan:我们看不到您的任何代码,所以我们不知道问题可能出在哪里。现在您已经发布了代码,当我回到笔记本电脑时,我可以仔细查看。如果您发布示例故障数据,这将有所帮助。如何判断文件已损坏?
  • 我刚刚使用 PDF-Creator 创建了一个包含一些文本的简单 PDF,并将其保存为 test.pdf。我可以用 Adob​​e Acrobat Reader 打开它。将文件发送到 Web 服务并对其进行解码后,无法再使用 Adob​​e Acrobat Reader 读取该文件。我就是这样检查的。
  • @Stefan:所以现在您需要开始仔细查看流程的每一步——查看开始和结束的字节。调试 C# 代码时查看内存中的字节。调试 Java 代码时查看内存中的字节。检查文件长度。检查你得到的字符串......所有这些。见codeblog.jonskeet.uk/2014/01/20/…
猜你喜欢
  • 2017-07-10
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2018-12-27
  • 2021-02-04
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多