Javascript 对于相同的输入字符串,为什么这些base64编码输出不同?

Javascript 对于相同的输入字符串,为什么这些base64编码输出不同?,javascript,groovy,go,base64,gnu,Javascript,Groovy,Go,Base64,Gnu,当从同一输入字符串中获取bas64编码的字符串时,我发现JavaScript、Groovy和Go具有相同的结果,但GNU base64略有不同。为什么呢 JavaScript(nodejs v0.10.33): new Buffer('Laurence Tureaud is Mr. T').toString('base64'); TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA== 'Laurence Tureaud is Mr. T'.bytes.encodeBase64

当从同一输入字符串中获取bas64编码的字符串时,我发现JavaScript、Groovy和Go具有相同的结果,但GNU base64略有不同。为什么呢

JavaScript(nodejs v0.10.33):

new Buffer('Laurence Tureaud is Mr. T').toString('base64');
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
'Laurence Tureaud is Mr. T'.bytes.encodeBase64().toString()
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
b64.StdEncoding.EncodeToString([]byte("Laurence Tureaud is Mr. T"))
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
echo 'Laurence Tureaud is Mr. T' | base64
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVAo=
Groovy(Java 8上的2.3.7):

new Buffer('Laurence Tureaud is Mr. T').toString('base64');
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
'Laurence Tureaud is Mr. T'.bytes.encodeBase64().toString()
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
b64.StdEncoding.EncodeToString([]byte("Laurence Tureaud is Mr. T"))
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
echo 'Laurence Tureaud is Mr. T' | base64
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVAo=
Go(1.4):

new Buffer('Laurence Tureaud is Mr. T').toString('base64');
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
'Laurence Tureaud is Mr. T'.bytes.encodeBase64().toString()
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
b64.StdEncoding.EncodeToString([]byte("Laurence Tureaud is Mr. T"))
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
echo 'Laurence Tureaud is Mr. T' | base64
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVAo=
GNU base64(GNU coreutils 8.12.197-032bb,带UTF-8术语字符集):

new Buffer('Laurence Tureaud is Mr. T').toString('base64');
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
'Laurence Tureaud is Mr. T'.bytes.encodeBase64().toString()
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
b64.StdEncoding.EncodeToString([]byte("Laurence Tureaud is Mr. T"))
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVA==
echo 'Laurence Tureaud is Mr. T' | base64
TGF1cmVuY2UgVHVyZWF1ZCBpcyBNci4gVAo=
echo'Laurence Tureaud是T先生'

Echo在字符串后添加一个换行符

请尝试以下操作以删除换行符:

echo-n'Laurence Tureaud是T'base64先生


您得到的
tgf1cmvuy2ugvhyzwf1zcbpcybnci4gva==

所有输出都是相同的


唯一的区别是bash在使用
echo
时会在末尾追加一个换行符(
\n
)。因此,是附加到输出的附加字符(字符
=
只是base64中的填充)。

它们使用相同的编码吗?如果解码结果,您将看到GNU base64的末尾有一个新行字符。(你会看到“劳伦斯·图雷奥是T先生”,其中\n是一个新行。试试看
echo-n“劳伦斯·图雷奥是T先生”| base64
啊,是的,确实是这样。以下匹配:printf“劳伦斯·图雷奥是T先生”|base64@user605331如果这对您有效,请将其标记为正确的解决方案。谢谢!:)所以在5分钟后才允许。我试过了。@user605331对不起,我不是故意催你的。只是想提醒一下。我在这个答案中添加了更多的内容,以供将来参考!