2011-10-24 2 views
1

XML-RPC Base64エンコード/デコードを使用してローカルファイルをリモートホストに配置しようとしています。これはバイナリファイルでは問題なく動作しますが、テキストファイルを送信しようとすると、すべての行末が削除されます。なぜこれが起こっているのですか?テキストファイルの新しい行がシリアル化されていない

クライアント側で

my $buf; 
my $encoded = ''; 
while (read($FILE, $buf, 60 * 57)) { 
    $encoded .= encode_base64($buf); 
} 

それは、それを取り、それを書き出し私のレッドストーンのXML-RPCサーバにオーバー送信するには:

// Create file 
    File file = new File(path); 
    file.createNewFile(); 

// Decode the encoded data sent over into bytes 
    byte[] bytes = Base64.decode(data.getBytes()); 

// Write them out to the file 
    FileOutputStream os = new FileOutputStream(file); 
    os.write(bytes); 
    os.flush(); 
    os.close(); 
+2

1. Notepad.exeではなく、(Notepad ++のような)良いテキストエディタを使用したいと思っています(Unixの改行文字は認識しません)。 2.コードのドキュメントを参照して、エンコードとデコードの両方がOSコンボ(送信者/受信者)に基づいて改行文字を正しく処理することを確認します。 – Kashyap

+2

あなたの読み書きは正しいようです。あなたの行末はLFだけで、ターゲットシステムは行末としてCRLFを望んでいますか?クライアント側またはサーバー側で行末が消えるかどうか、つまり、転送されたbase64データに行末が存在するかどうかを確認できますか? – Gandalf

+0

これは恥ずかしいです..でも、@thekashyap#1が出ていました。 Notepad ++は行末を正しく認識しています。サーバーは実際にはローカルで実行されていたので、1つのパスから別のパスに移動します。 – joslinm

答えて

0

問題があった私は、メモ帳で開いたということでしたCRLFエンディングを認識しません。

0

は$を設定してくださいバイナリモードでファイル、開いているコマンドの後に指定する必要があります。

open my $FILE, '<', 'the_file_name.extension'; 
binmode $FILE; 

# your code ... 
関連する問題