2011-12-15 6 views
3

imageはイメージファイルの文字列です。C#とJavaのBase64の違い

C#で次のように私は、コードを持っている:

Convert.ToBase64String(image);

及びコードJavaで次のように org.apache.commons.codec.binary.Base64.encodeBase64(image.getBytes())

結果が異なります。

誰かが言うその

  • Javaバイト理由:-128#バイトC

  • 127:0

255しかし、私はこれをどのように修正することができますか? JavaでC#のConvert.ToBase64String()を実装するにはどうすればよいですか? Javaを使ってC#と同じ結果が必要です。

+1

「イメージ」は文字列です。しかし、 'Convert.ToBase64String'は' string'を取っておらず、 'byte []'だけを取っています。 – CodesInChaos

+1

イメージデータを文字列にどのように取得するかを表示できますか?両方の言語でお願いします。 – Stephan

+0

理由を説明した人に、あなたのコードが間違っている理由を説明してください。さもなければ、C#コードを提供して明確化する必要があります。 –

答えて

3

の文字列をベースコードにしていますか?何をしたいのですか?まず文字列をバイト列に変換し、UTF-8やUTF-16などのエンコーディングを選択する必要があります。

私の推測では、両側で異なるエンコーディングを使用することができました。 JavaのString.GetBytes()はデフォルトの文字セットを使用しています(西洋風のWindowsバージョンでLatin1のようなものでしょう)。 C#の場合、関連するコードを投稿していません。

これを修正するには、エンコードを選択して、両側で明示的に使用します。 UTF-8を使用することをおすすめします。
Java側では正しい方法でエンコーディングする必要がありますので、 "modified UTF-8"にならないようにしますが、私はJavaプログラマーではないので、どのメソッドがUTF -8。私はだと思います。内部直列化メソッドを乱用した場合にのみ発生します。

符号付きバイトと符号なしバイトはここでは関係ありません。中間のバイトバッファは異なりますが、元の文字列とbase64文字列は両側で同一である必要があります。

+0

あなたは正しいです。それはencoding.iがイメージファイルを文字列に読み込んだことです。私はasciiでバイト[]にイメージファイルを読んだ後、結果は今equal.thanks – zhouxiang

5

まず、符号付きであろうと無署名であろうと、1バイトに256個の値が格納されることを認識する必要があります。符号付きバイト(Javaがサポートするもの)から符号なしの値を取得する場合は、& 0xFF

などを使用できます。

byte[] bytes = { 0, 127, -128, -1}; 
for(byte b: bytes) { 
    int unsigned = b & 0xFF; 
    System.out.println(unsigned); 
} 

プリント

0 
127 
128 
255 

簡単な答えは、あなたが同じ値を持つバイト[]を必要としないです。 ;)

関連する問題