2016-12-25 23 views
0

我的代碼有些奇怪的事情發生。我試圖打開一個文件並附加一個生成的字符串(這是基於時間),以便它可以在以後使用。在我的應用程序中,這會發生多次,但不知何故,這次它不會給我我想看到的結果。爲了澄清:Android OutputStreamWriter寫入非UTF-8字符

我用我的類中的以下代碼:

try { 
    OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE)); 

    oos.write(ArrangedTxtAsString); 

    oos.close(); 
} 
catch(FileNotFoundException e){ 
    Log.e("File Error", "File not found: " + e.toString()); 
} 

ARRANGED_TXT被定義爲:

private static final String ARRANGED_TXT = "arranged_txt.txt"; 

ArrangedTxtAsString是一個字符串,它看起來像這樣:

Banana 
Pineapple 
Orange 
Coconut 
Strawberry 

它是使用StringBuilder製作的。

現在的問題是,是,生成的文件看起來像這樣:

enter image description here

這不是用記事本問題++,但其他程序產生相同的結果。需要提到的一件重要的事情是,儘管文本看起來像是由非UTF-8字符組成的,但它完全由程序的其餘部分處理。這可能聽起來有點奇怪,但我想說的是,代碼工作正常,但唯一的問題是,通過文本編輯器顯示的文本不會與它應該對應的內容相對應看起來像。你看,我是一個完美主義者,這就是爲什麼我希望它得到修復。這可能也是未來的一個問題(調試puposes等)。

編輯:

看來,它並不重要字符串包含:一個字符,數字,或什麼;它給出了完全相同的結果。即使寫""結果在那些怪異的人物!

我真的很希望有人知道這裏發生了什麼! 預先感謝您。

+0

你的意思是'oos.write(ArrangedTxtAsString.toString());'? – Natecat

+0

'ArrangedTxtAsString'應該已經是一個字符串了,因爲它定義爲'ArrangedTxtAsString = stringBuilder.toString();',其中'stringBuilder'只是'StringBuilder'的一個實例。知道這一點,沒有什麼大驚喜,這也不管用。無論如何,我真的很感謝你的幫助! ;) – PythonPupil1906

+0

'OutputStreamWriter'不太適合輸出文本,你應該使用'BufferedWriter'而不是 – Natecat

回答

0

如果你需要編寫UTF-8必須使用構造函數與字符集,如:

OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE),"UTF-8"); 

OutputStreamWriter(OutputStream out, String charsetName)

否則,使用默認的編碼,而不是爲UTF-8中的所有系統

+0

恐怕這也不起作用:我得到完全相同的字符。儘管如此,謝謝你的時間! :) – PythonPupil1906