Base64 C#和Java之间的差异
Base64 C#和Java之间的差异,c#,java,base64,C#,Java,Base64,image是图像文件的字符串 我在C#中有如下代码: Convert.tobase64字符串(图像) 并在Java中编写如下代码: org.apache.commons.codec.binary.Base64.encodeBase64(image.getBytes()) 结果是不同的 有人说这是因为 Java字节:-128到127 C#字节:0到255 但是我怎么才能解决这个问题呢?如何在Java中实现C#的Convert.ToBase64String()? 通过使用Java,我需要与C#中
image
是图像文件的字符串
我在C#中有如下代码:
Convert.tobase64字符串(图像)代码>
并在Java中编写如下代码:
org.apache.commons.codec.binary.Base64.encodeBase64(image.getBytes())
结果是不同的
有人说这是因为
- Java字节:-128到127
- C#字节:0到255
但是我怎么才能解决这个问题呢?如何在Java中实现C#的Convert.ToBase64String()
?
通过使用Java,我需要与C#中相同的结果。首先,您需要意识到,一个字节存储256个值,无论是有符号的还是无符号的。如果您想从有符号字节(Java支持)中获取无符号值,可以使用&0xFF
e、 g
印刷品
0
127
128
255
简单的答案是不需要具有相同值的字节[] 您正在对字符串进行base64编码?你想让它做什么?首先需要将字符串转换为字节序列,选择UTF-8或UTF-16等编码
我猜你设法在两边使用了不同的编码。Java的String.GetBytes()
使用默认的字符集(可能类似于西方windows版本中的Latin1)。对于C#你没有发布相关代码
要解决此问题,请选择一种编码并在两侧显式使用它。我建议使用UTF-8
在Java方面,您应该使用正确的编码方法,这样您就不会得到“修改的UTF-8”,但由于我不是Java程序员,我不知道哪些方法输出修改的UTF-8。我认为只有在滥用某些内部序列化方法时才会发生这种情况
有符号字节与无符号字节在此处不相关。中间字节缓冲区将不同,但原始字符串和base64字符串的两侧应该相同。我也遇到了相同的问题。互联网上有一句话:
Java byte : -128 to 127 | C# byte : 0 to 255
我查阅了java base64编码和解码的算法原理。使用C#实现base64算法并运行程序:结果与
Convert.ToBase64String(byteArray).
最后发现解决这个问题的最好办法是:
Uri.EscapeDataString(Convert.ToBase64String(byteArray)).
需要注意的是,这就是URL中出现特殊字符的原因。您说的image
是一个字符串。但是Convert.ToBase64String
不接受字符串,只接受字节[]
。您能告诉我们如何将图像数据输入字符串吗?请用两种语言。让解释原因的人解释您的代码错误的原因,否则您需要提供C#代码并提供说明。您是对的。这是编码。我将图像文件读入字符串。在我将图像文件读入ascii字节[]后,结果现在相等。谢谢
Uri.EscapeDataString(Convert.ToBase64String(byteArray)).