使用 java 中的 c# base64 编码文件

Consume a c# base64 encoded file in java

我想将文件从 C# 传输到接受 base64 字符串的 java 网络服务。问题是,当我使用 c# Convert class 对文件进行编码时,它会根据小端无符号字节 [].

生成一个字符串

在Java byte[] 是有符号/大端。当我解码传递的字符串时,我得到一个不同的 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 已损坏。

"Signed" 和 "big-endian" 是 非常 不同的东西,我相信你自己搞糊涂了。

是的,字节在 Java 中签名,在 C# 中未签名 - 但我强烈怀疑你在这两种情况下得到的实际位相同......只是(比如说)11111111 的位模式在 C# 中表示 255,在 Java 中表示 -1。除非您将字节 视为数字 (这很少有用),否则没关系 - 如果您只是使用字节在Java边。