Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base64 C#和Java之间的差异_C#_Java_Base64 - Fatal编程技术网

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)).