java - 如果在命令行编译与在 IntelliJ 中编译,java 程序的 UTF-8 输出会有所不同

标签 java command-line utf-8 intellij-idea outputstream

以下程序的输出会有所不同,具体取决于我是使用 IntelliJ 编译它,还是从命令行手动编译它。据我所知,我的机器上只有一个编译器和 JVM。

public class OutputTest {

public static void main(String[] args) throws Throwable {
  System.out.println(" Java Version: " +
        System.getProperty("java.version") +
        " from " + System.getProperty("java.vendor"));
  String message = "Dźien Dobry. Jak się masz?";
  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  Charset charset = Charset.forName("UTF-8");
  PrintWriter pw = new PrintWriter(new java.io.BufferedWriter(
        new java.io.OutputStreamWriter(stream, charset)), true);
  pw.write(message);
  pw.close();
  System.out.println(stream.toString());
  System.out.println(java.util.Arrays.toString(stream.toByteArray()));
 }
}

在 IntelliJ 中编译时的输出:

Java Version: 1.6.0_26 from Apple Inc.
Dźien Dobry. Jak się masz?
[68, -59, -70, 105, 101, 110, 32, 68, 111, 98, 114, 121, 46, 32, 74, 97, 107, 32, 115, 105, -60, -103, 32, 109, 97, 115, 122, 63]

从命令行编译时的输出:

Java Version: 1.6.0_26 from Apple Inc.
D≈∫ien Dobry. Jak siƒô masz?
[68, -30, -119, -120, -30, -120, -85, 105, 101, 110, 32, 68, 111, 98, 114, 121, 46, 32, 74, 97, 107, 32, 115, 105, -58, -110, -61, -76, 32, 109, 97, 115, 122, 63]

明确一点:输出取决于代码的编译位置。如果我让 IntelliJ 编译代码,但从命令行运行它,我也会看到第一个答案。

我运行的是 MacOS 10.6.8。

此外,它的值(value)在于:当我在 Linux 中从命令行编译它时,我得到的答案与 IntelliJ 编译版本给出的答案相同。

最佳答案

检查平台编码;您可能需要在命令行上指定 -encoding 参数以匹配 IntelliJ 正在执行的操作。没有它,它将使用默认的平台编码,这可能与 IntelliJ 的行为方式匹配,也可能不匹配。

关于java - 如果在命令行编译与在 IntelliJ 中编译,java 程序的 UTF-8 输出会有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7906050/

相关文章:

.net - 你如何使用 PowerShell?

java - 相同的计算流程,但功能不同

java - 用 JDK 11 替换 wsimport

c# - 如何使用System.CommandLine绑定(bind)NodaTime.Duration?

java - 在一行上获取未知长度的未声明变量的最后 5 位数字?

PHP/MySQL 编码问题。 ★代替某些字符

java - 使用 JDBC 连接器 5.1 从 Java 读取/写入 MySQL 中的 UTF-8 数据时出现问题

c++ - 在 Windows 上获取 boost::filesystem::path 作为 UTF-8 编码的 std::string

java - 用于在网页中查找值的正则表达式

java - 可定制的 QRCode 应用程序