2009-12-01 166 views
5

當我試圖在Java中執行以下操作:編碼CP1252

System.out.println(System.getProperty("file.encoding"));

我得到cp1252的編碼。

有沒有辦法知道這個值來自哪裏? (像環境變量或其他東西)

我想打印在命令提示符上使用一些命令,如Windows XP上的systeminfo的編碼值。

+0

可能相關的信息在http://stackoverflow.com/questions/1336930/how-do-you-specify -a-java-file-encoding-value-consistent-with-the-underlying-wind – 2009-12-01 15:55:16

+0

just fyi,http://cp1252.com有一些寡婦代碼頁的信息1252 – 2011-01-03 21:21:37

回答

-1

我相信這個編碼由JVM設定所以它是沒有意義的,從外面

+0

不,它是不是,這是命令行工具的Windows編碼 – 2009-12-01 15:43:48

+1

Kico:不是,事實並非如此。命令行中使用的代碼頁是另一種。 – Joey 2009-12-01 15:44:54

3

該值檢索它,在Windows至少,用於非Unicode文本的遺留代碼頁。這是操作系統在使用舊的ANSI API時將字符串轉換爲以及從中轉換的字符串。對於任何新的程序,它應該應該沒有效果(據說,我仍然看到足夠的程序使用A而不是API函數的W變體,悲哀地)。

對於你的Java程序,這些都不重要,因爲Java只使用Unicode。如果您想在系統的代碼頁中編寫或讀取文本文件,那麼您將需要它。

但是,對於命令提示符,該編碼沒有任何重要價值,因爲控制檯默認使用模擬DOS年齡(850或437很常見)之一的OEM編碼。

5

cp1252是英文MS Windows安裝(Microsoft稱爲ANSI)的默認編碼。 Java默認情況下會將系統區域設置作爲其默認字符編碼。這意味着系統依賴。一般來說,我不喜歡依靠默認編碼。如果我知道我的文本將是純ASCII,那麼我會忽略它 - 否則,在實例化InputStreamReaderOutputStreamWriterString等或調用getBytes時,我會明確設置編碼。

請注意,cp1252是而不是 Windows命令提示符下的默認編碼。這是更舊的cp437,您可以使用chcp命令查看(並更改)。

1

因爲這並沒有真正有什麼用java做的,你可以只選擇使用一個WSH腳本:

' save this script as printANSI.vbs 
' usage: cscript /Nologo printANSI.vbs 
Set objShell = CreateObject("WScript.Shell") 
cp = objShell.RegRead("HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001" &_ 
           "\Control\Nls\CodePage\ACP") 
WScript.Echo cp 

也看到了chcp命令;您可能需要了解Windows命令提示符(some links in this blog post)上編碼的工作方式。

+0

感謝mcdowell,這很有用 – Arun 2009-12-03 04:22:29

0

據我發現,這是你的java源文件的編碼,你的輸出將改變一旦你改變它的文本文件的編碼。 在eclipse上,將其從Resource屬性中更改(Alt + Enter或右鍵單擊該文件,轉到資源)。 將cp1252的文本文件編碼更改爲其他內容,比如UTF-8,woo ...您的輸出將不再是cp1252 ..