2011-07-22 20 views
0

我在Java中,這行代碼保存:的Java:不能在UTF-8

new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name, append), "UTF-8")); 

這個作家不寫一個UTF-8的文件,因爲當我在記事本打開它++它說,編碼是:ANSI作爲UTF-8。我需要它是純粹的UTF-8。

你有什麼建議嗎?

+4

如果您的文件只包含ASCII字符,則不會有任何區別。即以UTF-8或ASCII格式保存,文件內容將完全相同,除非您輸入BOM字節(0xEF,0xBB,0xBF)。 – shinkou

+1

我不會僅僅依據Notepad ++所說的 - 你看過文件的內容嗎? –

+0

參見:http://stackoverflow.com/questions/1380690/what-is-ansi-as-utf-8-and-how-can-i-make-fputcsv-generate-utf-8-w-bom – dacwe

回答

11

記事本++(和任何其他工具)只能猜測編碼,它不是寫在你的文件(或在某些元數據)的任何地方。

如果您編寫的文本不包含ASCII範圍以外的任何字符(即,沒有Unicode碼點> 127的字符),則ANSI編碼的文件與UTF-8編碼中的文件無法區分。

6

Notepad ++使用啓發式算法來檢測編碼,即檢測到的編碼可能與真正的不同(這是一個猜測)。

在這種情況下,Notepad ++是正確的,但misunderlabeling的編碼。 ANSI as UTF-8is純UTF-8,只是沒有BOM

+0

* misunderlabeling *,這真的是一個字嗎? :P – pap

-1

最有可能的Notepad ++需要文件開頭的BOM。首先將字節EF BB BF寫入您的文件,然後編碼字符。

+1

沒有,它會工作得很好,沒有BOM。 – Piskvor