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

设置默认的Java字符编码

沈凡
2023-03-14
问题内容

如何通过编程正确设置JVM(1.5.x)使用​​的默认字符编码?

我读过,这-Dfile.encoding=whatever曾经是使用旧JVM的方法。由于没有理由,我没有那么奢侈。

我试过了:

System.setProperty("file.encoding", "UTF-8");

并且该属性被设置,但似乎不会导致getBytes下面的最终调用使用UTF8:

System.setProperty("file.encoding", "UTF-8");

byte inbytes[] = new byte[1024];

FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
FileOutputStream fos = new FileOutputStream("response-2.txt");
String in = new String(inbytes, "UTF8");
fos.write(in.getBytes());

问题答案:

不幸的是,file.encoding必须在JVM启动时指定该属性。通过输入你的主要方法时,编码中使用的字符由String.getBytes()和默认的构造函数InputStreamReader,并OutputStreamWriter已被永久缓存

正如Edward Grech指出的那样,在这种特殊情况下,JAVA_TOOL_OPTIONS 可以使用环境变量来指定此属性,但通常是这样完成的:

java -Dfile.encoding=UTF-8 … com.x.Main

Charset.defaultCharset()将反映对file.encoding属性的更改,但是核心Java库中需要确定默认字符编码的大多数代码都不使用此机制。

在编码或解码时,可以查询file.encoding属性或Charset.defaultCharset()查找当前的默认编码,并使用适当的方法或构造函数重载来指定它。



 类似资料:
  • 问题内容: 如何设置默认的Java字符编码? 问题答案: 必须在JVM启动时指定该属性。通过输入你的主要方法时,编码中使用的字符由和默认的构造函数,并已被永久缓存。 在特殊情况下, 可以使用环境变量来指定此属性,但通常是这样完成的: 将反映对属性的更改,但是核心Java库中需要确定默认字符编码的大多数代码都不使用此机制。 在编码或解码时,可以查询属性或查找当前的默认编码,并使用适当的方法或构造函数

  • 我正在尝试将AEM/Sling使用的字符编码设置为UTF-8。根据Sling文档,这可以被Sling主servlet上的属性覆盖: 从Sling Engine 2.2.4开始,请求参数是可选的。从这个版本开始,Sling Main Servlet支持一个配置设置,允许在请求参数丢失时更改所使用的默认字符编码。 null

  • 问题内容: 现在,我正在用自己的语言编写一个小的Java应用程序,其中只有几个maven pom.xml文件。我想使我所有的maven软件包都可以使用jdk 1.6进行编译,而如果没有在每个POM上手动设置它的话,我将找不到一个很好的方法-我讨厌复制粘贴 在我生成的每个pom.xml文件中。 有没有更简单的方法来解决此问题? 问题答案: 创建一个具有所需的编译器设置(以及任何其他默认设置)的仅po

  • 问题内容: Java如何确定用于的编码? 给定以下类别: 它被保存为UTF-8并在Windows系统上进行编译。 然后在git-bash控制台上(使用UTF-8字符集),我这样做: 这里发生了什么? 显然,java检查它是否连接到终端,并在这种情况下更改其编码。有没有一种方法可以迫使Java简单地输出普通的UTF-8? 我也使用cmd控制台尝试了相同的操作。重定向STDOUT似乎没有任何区别。如果

  • 我正在使用iTextSharp创建一个新的pdf文件。pdf将包含一个标题和一个pdf表格。生成的pdf文件的文件大小应该尽可能小,所以我使用默认字体(Helvetica,12pt)。有没有办法将默认字体大小从12pt更改为8pt。 我知道我可以为每个pdf表格单元格设置字体。 但是是否可以为整个文档/表格设置默认字体大小,这样我就不需要为每个表格单元格额外设置字体了? (我在谷歌上搜索了这个话题

  • 问题内容: 显而易见的答案是使用,但是我们最近发现这可能不是正确的答案。有人告诉我,结果在某些情况下不同于java.io类使用的实际默认字符集。看起来Java保留了2套默认字符集。有人对这个问题有见解吗? 我们能够重现一个失败案例。这是一种用户错误,但仍可能会暴露所有其他问题的根本原因。这是代码, 我们的服务器要求使用Latin-1中的默认字符集来处理传统协议中的某些混合编码(ANSI / Lat