Base64解码给出了不同的结果

时间:2011-12-01 11:35:40

标签: encoding character-encoding base64

我正在开发一个小的Streamserve项目(google it:P),在那里我获得了一些Base64编码的内容。我试图用多个解码器解码base64字符串,并且返回正确的结果..除了Streamserve中的Base64DecodeString方法。

编码的字符串是:'VABlAHMAdABpAG4AZwAgAGIAYQBzAGUANgA0AA =='预期结果是:'测试base64'

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

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

我可以毫无问题地在streamserve中编码/解码字符串..只是不是我得到的字符串

2 个答案:

答案 0 :(得分:6)

问题是您使用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

答案 1 :(得分:4)

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

听起来你可能想要使用UTF-16来编码你的文字,尽管在那种情况下我很惊讶你不仅仅是把垃圾拿出来......它看起来很像就像它实际上忽略解码的base64中的每个其他字节,而不是将它作为UTF-16代码单元中的高字节。