Base64解码给出了不同的结果

Her*_*ter 1 base64 encoding character-encoding

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

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

但是在Streamserve中,结果是:'Tsig ae4'

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

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

Pol*_*ial 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
Run Code Online (Sandbox Code Playgroud)

如果删除空字节,则得到以下结果:

54 65 73 74 69 6e 67 20 62 61 73 65 36 34
Run Code Online (Sandbox Code Playgroud)

这转换为以下ASCII文本:

Testing base64
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 5

解码base64的结果是二进制数据(同样编码时的输入也是二进制数据)。要从二进制数据转换为字符串(反之亦然),您需要应用UTF-8 或 UTF-16 等编码。您需要找出 Streamserve 正在使用哪种编码,并在将文本数据转换为二进制数据时使用相同的编码,然后再对其进行 Base64 编码。

听起来您可能想使用 UTF-16 来编码您的文本,尽管在这种情况下,我很惊讶您不仅得到了垃圾......看起来它实际上忽略了解码中的所有其他字节base64,而不是将其作为 UTF-16 代码单元中的高字节。