2012-02-24 51 views
1

所以我必須給我的Java應用程序提供一些參數,這些參數是從.bat文件中調用的。這樣做會使參數具有系統的字符集編碼,這會使某些字符顯示錯誤。我想這將字符串從Windows charset轉換爲Java中的UTF 8

 String titulo; 

    titulo = new String (args[1].getBytes(),"Cp1252"); 

也試圖與其他幾個人從這個名單http://docs.oracle.com/javase/1.4.2/docs/guide/intl/encoding.doc.html並沒有一個成功的。 我該怎麼編碼一個字符串從Windows charset到Java的UTF 8? 非常感謝!

問候,羅德里戈。

編輯:我在.bat給出的論點是馬丁,輸出(這是一個JLabel顯示)顯示此MartÝn。

+0

你已經試過「UTF-8」而不是「Cp1252」嗎? – Hamed 2012-02-24 18:42:48

+0

你說過「某些字符顯示錯誤」,但沒有顯示你如何顯示字符串。我的猜測是問題出在輸出端,而輸入參數可能是正確的。 – 2012-02-24 18:45:34

+0

是的,我做了......它給了我不同的(仍然是錯誤的)人物。感謝您提醒我,雖然 – rMaero 2012-02-24 18:46:13

回答

2

Windows命令提示符cmd.exe實際上不使用CP1252。它使用的東西顯然取決於系統;在西歐的系統上,它很可能是CP850。所以,你可以試試這個:

titulo = new String (args[1].getBytes(),"Cp850"); 

你可以看看code tables for cp850檢查應該發生的事情:我是字節ED在拉丁語1(以及由此延伸,CP1252),並在CP850字節ED爲Y 。因此:如果您從Java GUI打印「í」到cmd.exe,它將顯示爲「Ý」。 (但你似乎看到了相反的情況:終端上的「í」在GUI中顯示爲「Ý」..沒有任何意義,cmd.exe應該將字節A1傳遞給Java,這應該解釋爲它作爲「¡」..)

+0

然後,正確的解決方案是將.bat文件編碼爲CP850或更改控制檯編碼,而不是這種可怕的黑客攻擊。 – 2012-02-24 23:35:06

+0

當然..問題是Windows上的大多數文本編輯器不支持CP850,並且無法更改控制檯編碼。 **編輯**只需閱讀,您可以使用'chcp 1252'來更改控制檯代碼頁,但這可能會破壞某些控制檯應用程序 – Joni 2012-02-24 23:47:05

相關問題