2013-01-03 82 views
1

我在Linux服務器上使用JDK 1.7。我已經安裝了apache 6.0.35並使用代碼在OutputStreamWriter中選擇文件編碼

Writer w = new OutputStreamWriter(os,"Unicode"); 

以unicode格式寫入文件。

但是該文件是以unicode big endian格式生成的。我如何選擇不同的輸出格式?

+0

可能重複:http://stackoverflow.com/questions/7024039/in-java-when-writing-to-a-file-with-dataoutputstream-how- do-i-define-the-endia – Lennart

回答

2

'Unicode'不是一種格式,但是指定了像UTF-16(大和小端)和UTF-8這樣的編碼。

您可能需要特定的東西,如UTF-16LE而不是Unicode。看一下http://docs.oracle.com/javase/7/docs/api/java/nio/charset/StandardCharsets.html的列表

+0

注意:它是Charset.UTF_16LE或「UTF-16LE」 –

+0

@PeterLawrey感謝您的糾正。下劃線文字版本也適用於我;我想這是一個別名。 – artbristol

+0

對不起,這是StandardCharsets.UTF_16LE。 :] –

1

如果你使用的是Unicode或UTF-16,默認情況下它將是大端。如果你沒有指定endianess,那麼Java通常假設爲big endian。如果你想小尾數則需要與"UTF-16LE"StandardCharsets.UTF_16LE

指定它從java.nio.charset.StandardCharsets

public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); 
+0

我也試過這個,生成的文件是ANSI格式。該應用程序在linux服務器下運行。我需要安裝X11R6嗎? – prasad

0

Java的字符集名 「UTF-16」 是指UTF-16與大端。 嘗試是這樣的小端格式:

BufferedWriter out = new BufferedWriter 
    (new OutputStreamWriter(new FileOutputStream(path),"UTF-16LE"));