2015-10-16 69 views
0

我有一個GUI菜單,項目,標籤等應用程序。它們的可見名稱包含unicode字符。現在,我需要用unicode字符正確顯示此應用程序。如果我運行jar,java使用默認系統編碼,而不是unicode。我可以通過將一個參數-Dfile.encoding = UTF-8添加到帶有-jar <app.jar>的命令行來解決此問題。但是,讓我們說我想給某人一個jar,他可能會愚蠢地打開CMD並將一些參數傳遞給java。實際上,Java虛擬機是一個程序,啓動參數做大事情。 Java應用程序在Java虛擬機中運行。由於manifest.mf將jvm參數傳遞給將要執行的程序的main方法的路徑,爲什麼我們沒有例如manifest.mf文件中的函數,這是一個arv數組,它將在jvm中使用正在運行應用我知道java更習慣於製作實用的東西,而GUI應用程序則有C,但java是一門偉大的語言,除了虛擬機的一些缺點之外。我對我的主程序有一個想法,它會用適當的參數打開新的java vm並在那裏運行應用程序。然後,自殺。我也知道關於包裝jar以exe文件,所以exe文件將運行jvm和應用程序,但後來我鬆散多平臺壓縮。感謝您的回答。希望我沒有寫在這裏somethink無用。是否有可能運行我的應用程序編碼unicode沒有終端?

+0

「爲GUI應用有C」 - 大LOL。但是,嚴肅地說,你應該讀取屬性'file.encoding'的名字並且一遍又一遍地閱讀它,考慮它想要告訴你什麼。在你多次讀取名字後,它是否仍然讓你感到驚訝,當我現在告訴你它與GUI沒有任何關係時? – Holger

+0

是的,我明白了。我只想說,通過在C中編寫應用程序,我可以完全控制我的程序,並且虛擬機不會限制我。我想如果我有CLI應用程序,我應該定義我的自定義流和編碼。但是如何在GUI中使用一些庫。 –

+0

看來你還是不明白這一點。沒有理由混淆這個屬性;它與GUI應用程序完全無關。 GUI庫使用unicode。如果你沒有在你的代碼中指定一個編碼*,那麼這個相關的唯一地方就是(文件)I/O *。沒有函數會強制您使用系統的默認編碼,對於處理該默認編碼的每個函數,都有一個接受編碼作爲參數的替代方法。如果您的應用程序不想使用默認編碼,則不需要。你的問題是*不*你有一個GUI。 – Holger

回答

0

幾個問題在這裏,但讓我給你一個總體指導:

  1. 當你收拾一個JAR中,JAR文件的元數據,如條目名稱,註釋和清單的內容,必須以UTF8編碼(對於標籤等等)。無論您使用命令行工具還是某些IDE打包JAR,情況都是如此。所以首先檢查你的帶有標籤等的文件是否是UTF8編碼的。

  2. 您的操作系統可能有非Unicode設置。所以當你編輯和保存標籤的.properties(或其他)文件時,它們實際上不會以UTF8保存。

  3. 如果您打包「可啓動」JAR,只要您在JAR內部有UTF-8標籤,就應該使用UTF-8。

看一看這一問題也:How to Force a jar to uses(or the jvm runs in) utf-8 instead of the system's default encoding

+1

屬性文件使用'ISO Latin-1'又名'ISO 8859-1'存儲,參見['Properties.load'](http://docs.oracle.com/javase/8/docs/api/java/util /Properties.html#load-java.io.InputStream-)... – Holger

相關問題