2011-11-17 18 views
6

私はこの解決するために助けてください。私はAndroidでbase64でエンコードされた文字列を連結する方法は?

String encoded_name = new String(Base64.encode(name.getBytes(), 0)); 
String encoded_pass = new String(Base64.encode(pass.getBytes(), 0)); 

ようBase64文字列にこれら二つをエンコード私は

String name = "[email protected]"; 
String pass = "abc"; 

ような電子メールIDとパスワード用の2つの文字列を持っている

と私はこのような2つのエンコードされた文字列を連結する必要があります

String merge = encoded_name + " " + encoded_pass; 

は私が

System.out.print("Concatenate string= " + merge); 

によってコンソールでこの文字列をチェックしますが、コンソールに、私はなぜこれが結果を予期しないさhappingされ、この

11-18 00:25:29.898: INFO/System.out(1244): Merge= eHl6QGdtYWlsLmNvbQ== 
11-18 00:25:29.908: INFO/System.out(1244): YWJj 

のように二列に結果を取得していますなぜ私は1行で印刷していないのですか?これを解決するために私を助けてください。

おかげ

+0

を私はアンドロイドの情報を表示するためにはSystem.outを使用したことがない、あなたはログインクラスで試すことができます? Log.e( "BASE64"、マージ); –

+0

ログの影響を受けません.e –

+0

Base64文字列が "改行"で終わるかどうかを確認したり、* String.trim()*でそれを削除してください。 – JimmyB

答えて

20

あなたはNO_WRAPフラグを使用する必要があり、Base64でクラスが追加の改行を追加しません。

NO_WRAP:エンコーダフラグビット全てのラインターミネータ(すなわち、出力が一つの長いラインであろう)を省略します。

だから、次のようにあなたの行を変更します。

String encoded_name = new String(Base64.encode(name.getBytes(), Base64.NO_WRAP)); 
String encoded_pass = new String(Base64.encode(pass.getBytes(), Base64.NO_WRAP)); 

この意志の出力は次のよう

11-17 19:16:51.283: INFO/System.out(354): Concatenate string= eHl6QGdtYWlsLmNvbQ== YWJj 
0

ルックthis docでは、MIME部

MIMEはBase64でエンコードされたラインのための固定長を指定していないことを述べ、それは76文字の行の最大長を指定しません。さらに、ほとんどの実装では、CR/LF改行を使用して符号化された行を区切りますが、任意の英字を対応するデコーダで無視する必要があることを指定しています。

あなたは、あなたの最初のベース64文字列の最後の文字を削除することを検討すべきである、\ nのように思わ(より一般的な方法は、それがあるかどうか天気を調べることであろう。)

よろしく、 ステファンDocsで説明したように

1

Android Api reference Documentに見てください。これは、アンドロイドのBase64エンコード/デコードに関する他のすべてのクエリを解決します。

あなたの問題を解決する一つのより効率的な方法は:

String encoded_name = Base64.encodeToString(name.getBytes("utf-8"), Base64.NO_WRAP); 
String encoded_pass = Base64.encodeToString(pass.getBytes("utf-8"), Base64.NO_WRAP); 

出し: -

11-17 10:55:27.492: V/BASE-64-.encodeToString(525): eHl6QGdtYWlsLmNvbQ== YWJj 
関連する問題