Encoding Base64解码给出不同的结果

Encoding Base64解码给出不同的结果,encoding,character-encoding,base64,Encoding,Character Encoding,Base64,我正在做一个小型Streamserve项目(google it:p),在那里我得到一些Base64编码的内容。我尝试用多个解码器解码base64字符串,所有解码器都返回正确的结果。。除了Streamserve中的Base64DecodeString方法 编码字符串为:“VablahmadabPag4AzwagagayQbzaguanga0AA==”,预期结果为:“Testing base64” 然而,在Streamserve中,结果是:“Tsig ae4” 它只是跳过每一个字母。现在我知道大多数

我正在做一个小型Streamserve项目(google it:p),在那里我得到一些Base64编码的内容。我尝试用多个解码器解码base64字符串,所有解码器都返回正确的结果。。除了Streamserve中的Base64DecodeString方法

编码字符串为:“VablahmadabPag4AzwagagayQbzaguanga0AA==”,预期结果为:“Testing base64”

然而,在Streamserve中,结果是:“Tsig ae4”

它只是跳过每一个字母。现在我知道大多数人不知道Streamserve,但我有一种预感,这可能是一个字符编码问题。。问题,希望有人能知道这里可能发生了什么


我可以毫无问题地对streamserve中的字符串进行编码/解码。。不仅仅是作为输入的字符串

解码base64的结果是二进制数据(编码时的输入也是二进制数据)。要从二进制数据转换为字符串或从二进制数据转换为字符串,需要应用UTF-8或UTF-16等编码。在base64编码之前,您需要找出Streamserve使用的编码,并在将文本数据转换为二进制数据时使用相同的编码


听起来你可能想用UTF-16来编码你的文本,虽然在这种情况下,我很惊讶你不仅仅是把垃圾拿出来。。。看起来它实际上忽略了已解码base64中的每个其他字节,而不是将其作为UTF-16代码单元中的高位字节。

解码base64的结果是二进制数据(编码时的输入也是二进制数据)。要从二进制数据转换为字符串或从二进制数据转换为字符串,需要应用UTF-8或UTF-16等编码。在base64编码之前,您需要找出Streamserve使用的编码,并在将文本数据转换为二进制数据时使用相同的编码


听起来你可能想用UTF-16来编码你的文本,虽然在这种情况下,我很惊讶你不仅仅是把垃圾拿出来。。。看起来它实际上忽略了解码base64中的每一个其他字节,而不是将其作为UTF-16代码单元中的高位字节。

问题在于,您正在使用UTF-16编码并解码回ASCII或UTF8。在将字符串编码为base64之前,将字符串编码更改为UTF8,这样应该可以正常工作

下面是base64 blob的十六进制转储:

54 00 65 00 73 00 74 00 69 00 6e 00 67 00 20 00 62 00 61 00 73 00 65 00 36 00 34 00
如果删除空字节,则会得到以下结果:

54 65 73 74 69 6e 67 20 62 61 73 65 36 34
转换为以下ASCII文本:

Testing base64

问题是您正在使用UTF-16编码,并将其解码回ASCII或UTF8。在将字符串编码为base64之前,将字符串编码更改为UTF8,这样应该可以正常工作

下面是base64 blob的十六进制转储:

54 00 65 00 73 00 74 00 69 00 6e 00 67 00 20 00 62 00 61 00 73 00 65 00 36 00 34 00
如果删除空字节,则会得到以下结果:

54 65 73 74 69 6e 67 20 62 61 73 65 36 34
转换为以下ASCII文本:

Testing base64

实际上,该字符串解码为
T�E�s�T�我�N�G� �B�A.�s�E�6.�4.�在“适当”UTF-8中。我假设它是在UTF-16系统上编码的。实际上,该字符串解码为
T�E�s�T�我�N�G� �B�A.�s�E�6.�4.�在“适当”UTF-8中。我假设它是在UTF-16系统上编码的你好。。我试过你说的了。在java中,我这样做了:Base64.encodeBase64String(content.getBytes(“UTF-8”);但这并没有改变任何事情:(看起来没什么区别..无论我选择什么字符集,我都会得到相同的结果。而且我注意到,生成的文件中的换行符在记事本中不起作用。我还真的需要让它起作用..奇怪。我想你可以使用一个循环,使用所有非零字节生成一个新数组…记事本中的换行符问题只是简单而已因为您使用的是Unix样式的
\n
换行符,而不是Windows样式的
\r\n
。我成功了。原来我可以设置解码时要使用的字符集。在编码工作时将其设置为相同的字符集(谁知道呢;P)anyhoo..谢谢帮助!:)你好,我试过你说的。在java中,我做了如下操作:Base64.encodeBase64String(content.getBytes(“UTF-8”);但它没有改变任何东西:(看起来没什么区别..无论我选择什么字符集,我都会得到相同的结果。而且我注意到,生成的文件中的换行符在记事本中不起作用。我还真的需要让它起作用..奇怪。我想你可以使用一个循环,使用所有非零字节生成一个新数组…记事本中的换行符问题只是简单而已因为您使用的是Unix样式的
\n
换行符,而不是Windows样式的
\r\n
。我成功了。原来我可以设置解码时要使用的字符集。在编码工作时将其设置为相同的字符集(谁知道呢;P)anyhoo..谢谢帮助!:)