2015-10-16 44 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

相关问题