当前位置: 首页 > 面试题库 >

如何强制jar使用(或jar运行的jvm)utf-8,而不是系统的默认编码

蒋健
2023-03-14
问题内容

我的Windows的默认编码是GBK,而我的Eclipse完全是utf-8编码。
因此,在我的Eclipse中运行良好的应用程序崩溃了,因为将这些单词导出为jar文件时变得不可读;
我必须在.bat文件中写以下行才能运行该应用程序

   start java -Dfile.encoding=utf-8 -jar xxx.jar

现在我的问题是我可以在源代码中写一些东西来设置应用程序使用(或运行jvm)utf-8,而不是系统的默认编码。


问题答案:

打开文件进行读取时,需要显式指定要用于读取文件的编码:

Reader r = new InputStreamReader(new FileInputStream("myfile"), StandardCharsets.UTF_8);

这样,默认平台编码(您可以使用更改-Dfile.encoding)的值不再重要。

注意:

我通常建议 始终 为依赖于标准语言环境的任何操作(例如字符I / O)显式指定编码。许多Java
API方法默认使用平台编码,我认为这是一个不好的设计,因为平台编码通常不是正确的,而且它可能会突然改变(如果用户(例如,用户切换了操作系统区域设置)),从而破坏了您的应用程序。

因此,只需始终说出您想要哪种编码即可。

在某些情况下,平台编码是正确的(例如,在打开用户刚刚为您创建的文件时),但是这种情况很少见。

笔记2:

java.nio.charset.StandardCharsets是Java
1.7中引入的。对于较旧的Java版本,您需要将输入编码指定为String(ugh)。可能的编码列表取决于JVM,但是保证每个JVM至少具有:

US-ASCII,ISO-8859-1,UTF-8,UTF-16BE,UTF-16LE,UTF-16。



 类似资料:
  • 我正在运行一个WildFly10应用服务器。现在我注意到,当我将standalone.xml配置文件中的默认编码更改为utf-8时,在服务器重新引导时,更改被删除了。 然后我读到我应该使用CLI脚本。现在,我该怎么做呢?什么形式的CLI脚本会将属性default-encoding=“utf-8”添加到下面的子系统: 这里对它进行了修改,我希望它保持在标准的。xml中: 所以这里唯一改变的是在标记中

  • 问题内容: 我使用eclipse IDE编写了这个小型Java程序。我已将工作区设置为支持UTF-8,并且从Eclipse执行该程序时,程序可以愉快地运行。 该程序的一部分是将一些数据写入文件中(由于使用阿拉伯语,因此需要UTF-8)。 我需要导出一个可运行的JAR文件,以便将此程序提供给我的客户。 我的问题: 当我使用“导出到可运行的JAR文件”导出程序时,它会正常运行,但是用阿拉伯语写到文件中

  • 通过从mysql表获取数据,我正在生成csv文件并上传到某个ftp文件夹。但是其他从ftp端使用这个csv文件的人说它是ANSI编码的。如何将其更改为UTF-8编码?为此,我使用下面的代码。 当我下载文件并在记事本中打开,然后单击保存,因为它总是显示编码为ASNI。我哪里做错了?任何帮助将不胜感激。

  • 问题内容: 我试图使我的Flask应用程序在CentOS服务器上工作。基本上,问题是我安装了python 2.6,这是系统默认值,而Python 3.4则安装在。我想对mod_wsgi使用Python 3.4 virtualenv或至少Python 3.4解释器来运行我的应用程序。 我在中创建了virtualenv 。 我有这个WSGI脚本: 并在Apache中进行以下配置: 但是,当尝试运行该应

  • 问题内容: UTF-8是Java中的默认编码吗? 如果没有,我怎么知道默认使用哪种编码? 问题答案: JVM的默认字符集是运行它的系统的默认字符集。对此没有特定的值,并且通常不应将默认编码视为任何特定的值。 可以在运行时通过对其进行访问,尽管这对你有用,但实际上你应该始终在明确指定编码的情况下这样做。

  • 编辑: 结构: A.jar(或A.war) | |src/main/resources/config。属性-(标记为p1) | ||依赖的罐子 当我运行A. jar(或A. war,因为B. jar可以由Web应用程序或java进程调用)时,我希望B. jar中的代码始终使用p1; 当我单独运行B. jar时,我希望B. jar中的代码使用p2 另一种描述方式是主jar/war中同名的资源文件(这