2011-11-17 51 views
6

請幫我解決這個問題:在Android中如何連接base64編碼的字符串?

我有電子郵件ID和密碼兩個字符串像

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

我編碼這些兩成Base64編碼字符串如

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

,我需要連接這兩個編碼的字符串,如

String merge = encoded_name + " " + encoded_pass; 

我檢查這個字符串控制檯通過

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

但在控制檯中我得到的結果在兩行這樣

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

這是爲什麼呢happing結果出人意料對我來說,爲什麼它不是單行打印。請幫我解決這個問題。

由於

+0

我從來沒有使用過的System.out以顯示Android的信息,你可以嘗試用Log類? Log.e(「BASE64」,合併); –

+0

不受Log.e影響 –

+0

檢查您的Base64字符串是否以「換行符」結尾,或用* String.trim()*刪除它。 – JimmyB

回答

20

您應該使用Docs中所述的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(一個比較通用的方法是測試羯羊它是或不是。)

問候, 斯特凡

1

請對Android Api reference Document看看。它將解決有關Android中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 
相關問題