2016-07-13 4 views
0

nodejs:BASE64エンコード、nodejs C++、Pythonの結果は切り抜いある

var test = 'VdEU+Q2J5qfwsn9xshAcEImDSnxTR8RkRLlLmyNaeos='; 

var result = new Buffer(test, 'base64').toString() 
//var buf = Buffer.from(test, 'base64'); 
//var result = new Buffer(test, 'base64').toString("utf8"); 
var fs = require('fs'); 

fs.writeFile("test.txt",result,function(e){//会先清空原先的内容 
    if(e) throw e; 
}) 

パイソン:

import base64 

result = base64.b64decode('VdEU+Q2J5qfwsn9xshAcEImDSnxTR8RkRLlLmyNaeos=') 
file_object = open('thefile.txt', 'w') 
file_object.write(result) 
file_object.close() 

C++:(Iはlibcefの基本ライブラリのBASE64を使用):

const std::string kText = "VdEU+Q2J5qfwsn9xshAcEImDSnxTR8RkRLlLmyNaeos="; 

std::string encoded; 
base::Base64Decode(kText, &encoded); 

FILE *pFile = fopen("1.txt", "wb+"); 
fwrite(encoded.c_str(), encoded.length(), 1, pFile); 
fclose(pFile); 

結果PythonであるC++は同じですが、nodejsは異なります

+0

あなたはどちらが正しいと思いますか?なぜですか? –

+0

python C++が正しいです。私はopenidで使用されているPythonのAPIを使用しますが、node64のapiを作成します。間違った場所は、base64のデコード時にdiffentなので、この場所です。 –

+0

@stone_jbあなたはここの出力も表示します – Iceman

答えて

0

あなたは、単にtoString()を呼び出さないする必要があります。

var result = new Buffer(test, 'base64'); 

、ノードコードは他の人と同じように行います。

+0

素晴らしい。しかし、なぜ? – Iceman

+1

@Iceman: 'toString()'はデータを再エンコードしますが、生のバイトが必要なためです。 –

+0

ありがとう –

関連する問題