當我試圖在Java中執行以下操作:編碼CP1252
System.out.println(System.getProperty("file.encoding"));
我得到cp1252
的編碼。
有沒有辦法知道這個值來自哪裏? (像環境變量或其他東西)
我想打印在命令提示符上使用一些命令,如Windows XP上的systeminfo的編碼值。
當我試圖在Java中執行以下操作:編碼CP1252
System.out.println(System.getProperty("file.encoding"));
我得到cp1252
的編碼。
有沒有辦法知道這個值來自哪裏? (像環境變量或其他東西)
我想打印在命令提示符上使用一些命令,如Windows XP上的systeminfo的編碼值。
我相信這個編碼由JVM設定所以它是沒有意義的,從外面
不,它是不是,這是命令行工具的Windows編碼 – 2009-12-01 15:43:48
Kico:不是,事實並非如此。命令行中使用的代碼頁是另一種。 – Joey 2009-12-01 15:44:54
該值檢索它,在Windows至少,用於非Unicode文本的遺留代碼頁。這是操作系統在使用舊的ANSI API時將字符串轉換爲以及從中轉換的字符串。對於任何新的程序,它應該應該沒有效果(據說,我仍然看到足夠的程序使用A而不是API函數的W變體,悲哀地)。
對於你的Java程序,這些都不重要,因爲Java只使用Unicode。如果您想在系統的代碼頁中編寫或讀取文本文件,那麼您將需要它。
但是,對於命令提示符,該編碼沒有任何重要價值,因爲控制檯默認使用模擬DOS年齡(850或437很常見)之一的OEM編碼。
cp1252是英文MS Windows安裝(Microsoft稱爲ANSI)的默認編碼。 Java默認情況下會將系統區域設置作爲其默認字符編碼。這意味着系統依賴。一般來說,我不喜歡依靠默認編碼。如果我知道我的文本將是純ASCII,那麼我會忽略它 - 否則,在實例化InputStreamReader
,OutputStreamWriter
,String
等或調用getBytes
時,我會明確設置編碼。
請注意,cp1252是而不是 Windows命令提示符下的默認編碼。這是更舊的cp437,您可以使用chcp
命令查看(並更改)。
因爲這並沒有真正有什麼用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)上編碼的工作方式。
感謝mcdowell,這很有用 – Arun 2009-12-03 04:22:29
據我發現,這是你的java源文件的編碼,你的輸出將改變一旦你改變它的文本文件的編碼。 在eclipse上,將其從Resource屬性中更改(Alt + Enter或右鍵單擊該文件,轉到資源)。 將cp1252的文本文件編碼更改爲其他內容,比如UTF-8,woo ...您的輸出將不再是cp1252 ..
可能相關的信息在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
just fyi,http://cp1252.com有一些寡婦代碼頁的信息1252 – 2011-01-03 21:21:37