Base64 C#和Java之间的区别

image是图像文件的字符串。

我在C#中有如下代码:

Convert.ToBase64String(image);

和Java中的代码如下: org.apache.commons.codec.binary.Base64.encodeBase64(image.getBytes())

结果是不同的。

有人说是因为

  • Java字节:-128到127

  • C#字节:0到255

但是我该如何解决这个问题呢? 如何在Java中实现C#的Convert.ToBase64String() ? 我需要使用Java在C#中获得相同的结果。

你是base64编码一个字符串 ? 你想要那样做什么? 首先需要将字符串转换为字节序列,选择UTF-8或UTF-16等编码。

我的猜测是你设法在双方使用不同的编码。 Java的String.GetBytes()使用默认的字符集(在西方Windows版本上可能类似于Latin1)。 对于C#,您没有发布相关代码。

要解决此问题,请选择编码并在两侧明确使用。 我建议使用UTF-8
在Java方面你应该使用正确的编码方法,所以你最终不会得到“修改过的UTF-8”,但由于我不是java程序员,我不知道哪些方法输出修改了UTF-8 。 我认为只有滥用一些内部序列化方法才会发生这种情况。

有符号与无符号字节在这里不相关。 中间字节缓冲区将不同,但原始字符串和base64字符串在两侧应该相同。

首先,您需要意识到一个字节存储256个值,无论是有符号还是无符号。 如果要从签名字节(这是Java支持的)中获取无符号值,可以使用& 0xFF

例如

 byte[] bytes = { 0, 127, -128, -1}; for(byte b: bytes) { int unsigned = b & 0xFF; System.out.println(unsigned); } 

版画

 0 127 128 255 

简单的答案是你不需要一个具有相同值的byte []。 ;)