2017-10-11 86 views
0

我在表中包含字符串「Address Pippo p.2°」的字段。 我的程序讀取此值,並將其寫入txt文件,但輸出是:字符在txt文件中的編碼和可視化

「地址皮波第2頁A°」(A是不需要的)

我有一個問題,因爲txt文件是位置文件。我使用這些Java構造打開文件: FileWriter fw = new FileWriter(file,true); pw = new PrintWriter(fw);

我想寫沒有奇怪字符的字符串

對我有幫助嗎?

在此先感謝

+0

你是什麼意思「txt文件是位置文件」? – DodgyCodeException

+0

你沒有用它編寫的字符編碼讀取它,因此,[mojibake](https://en.wikipedia.org/wiki/Mojibake)。 –

回答

0

嘗試將字符串編碼成UTF-8這樣,

File file = new File("D://test.txt"); 
    FileWriter fw = new FileWriter(file, true); 
    PrintWriter pw = new PrintWriter(fw); 
    String test = "Address Pippo p.2 °"; 
    ByteBuffer byteBuffer = Charset.forName("UTF-8").encode(test); 
    test = StandardCharsets.UTF_8.decode(byteBuffer).toString(); 
    pw.write(test); 
    pw.close(); 
+0

它的作品,但我想念的原因。目前沒關係,謝謝 –

1

的Java使用Unicode。當您將文本寫入文件時,它會使用特定的字符編碼進行編碼。如果你沒有明確指定它,它將使用「系統默認編碼」,它是爲特定JVM實例配置的默認值。您需要知道您用來編寫文件的編碼。然後,您需要使用相同的編碼來讀取和顯示文件內容。您看到的有趣角色可能是由於使用UTF-8編寫文件,然後嘗試讀取並顯示在例如記事本使用Windows-1252(「ANSI」)編碼。

決定你想要什麼編碼,並堅持閱讀和寫作。要編寫使用的是Windows 1252,使用:

Writer w = new OutputStreamWriter(new FileInputStream(file, true), "windows-1252"); 

如果你在UTF-8寫,然後告訴你想讓它讀取UTF-8的文件,記事本。一種方法是在文件的開頭寫入字符'\ uFEFF'(字節順序標記)。

如果您使用UTF-8,請注意,非ASCII字符會將後續字節排除在外。因此,例如,如果電話字段必須總是從字節位置200開始,然後在地址字段中具有非ASCII字符,然後它將使電話字段在字節位置201或202處開始。使用windows-1252編碼沒有此問題,但該編碼無法編碼所有Unicode字符。

+0

「任何配置爲特定JVM實例的默認值」:[無論](https://en.wikipedia.org/wiki/Whatever_(俚語))是操作語。它隨着系統,用戶和用戶的不同而不同。它可能正是想要的,但很少。 –