2012-07-13 137 views
0

我一直在試圖讓一個輸入流中讀取一個文件,ISA純文本,並內嵌了一些圖像和其他文件base64,並在String再寫一遍。但保持編碼,我的意思是,我想在字符串類似:Base64編碼的InputStream字符串

/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIf 
IiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7 

我已經與類Base64InputStream多由包試圖爲org.apache.commons.codec,但我不能fiugure出來。任何形式的幫助將非常感激。提前致謝!

BufferedReader br= new BufferedReader(new InputStreamReader(bodyPart.getInputStream())); 
         StringBuilder sb = new StringBuilder(); 
         String line; 
         while ((line = br.readLine()) != null) { 
          sb.append(line); 
         } 
         br.close(); 

獲得結果類似:.DIC;ÿÛC;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ÿÀ@@"ÿÄ

+1

我不明白。如果你不想解碼它,你爲什麼不簡單地使用一個簡單的閱讀器? – 2012-07-13 14:41:35

+0

由於base64編碼未支載 – 2012-07-13 14:45:03

+1

可以使用BASE64在有限的一組是與幾乎所有字符編碼不變,例如ASCII或UTF-8字符的編碼的字節。 Base64不是字符集編碼。 – 2012-07-13 14:46:43

回答

1

包含一些的base64數據的文本文件可以使用的字符集來讀取使用閱讀器的代碼

編輯

件的文件的其餘部分。

Base64 encoding是平均編碼字節在有限的一組是與幾乎所有字符編碼不變,例如ASCII或UTF-8字符的。

Base64是不是一個字符集編碼,你沒有指定你必須讀入文件到一個字符串時,編碼數據的base64一些。

因此,如果您的文本文件通常是UTF-8(這是可能的),你可以沒有問題讀它,即使它包含base64編碼的流。只需使用基本的閱讀器,並且不要使用Base64InputStream,如果您不想對其進行解碼。

使用閱讀器打開文件時,必須輸入specify the encoding。如果你不知道它,我建議你用可能的測試,如UTF-8,US-ASCIIISO-8859-1

+1

感謝您的回答。問題不是固定的。問題是我沒有打開任何文件。我正在使用MimeMessage和Multipart,只給出路徑。我怎麼能指定編碼? – 2012-07-13 15:01:10

+0

你沒有說過它是eml之前......你不必提供字符集作爲RFC 822精確它只能包含US-ASCII。我認爲MimeMessage處理一個簡單的InputStream上的字符集。 – 2012-07-13 15:04:28

+0

顯然不是一個簡單的InputStream,我不能只讀它並將其複製到一個簡單的String – 2012-07-13 15:09:26

1

如果你有一個正常的InputStream對象比你可以使用Apache公共庫類Base64InputStream構造直接從它那裏得到Base64編碼流

2

你有沒有試着這樣做:

final byte[] bytes64bytes = Base64.encodeBase64(IOUtils.toByteArray(is)); final String content = new String(bytes64bytes);