Java ├ └ 的编码问题

Java encoding issue with ├ └

如果我打印

System.out.println("│ ├── └──");

我只看到问号 (???)。 Seams认为这是编码问题之王。有什么解决办法吗?

使用 UTF-8 代码代替实际字符。例如├为\u251c.

这里有一个link可以帮助您将字符转换为相应的代码:http://www.cylog.org/online_tools/utf8_converter.jsp

希望对您有所帮助!

Any ideas how to fix this?

您的问题有两个可能原因:

1) 编辑编译源代码时可能会出现这种情况。编译器可能会使用与您编辑时使用的文件编码不同的文件编码来读取源代码。如果您不指定源文件编码,编译器将使用特定于平台的默认值,这可能不是正确的。

解决此问题的方法是调整您的编译器设置以指定正确的源文件编码。你如何做到这一点取决于你如何编译。如果您使用 javac 从命令行编译,请使用 -encoding 选项。

或者,解决此问题的方法是用 Unicode 转义替换源代码中的违规行为。例如:

String s = "\u251c";

应该给你一个由“├”字符组成的单字符串。我会推荐解决方法。包含非 ASCII 字符的源代码总是对您编辑和编译的方式敏感......这不是一件好事。

2) 发生这种情况的原因可能是 Java 运行时平台的默认输出编码与显示输出的实际编码不匹配。

对此的修复是以下之一:

  • 更改显示编码,
  • 覆盖 JVM 的默认编码(例如使用 -Dfile.encoding=UTF-8),或
  • 更改您的代码以使用特定编码进行输出。

哪个最好视情况而定;例如为什么事情首先是 "wrong"。


值得 运行 从命令提示符测试此应用程序以查看问题是否也存在。如果是,则将标准输出重定向到文件,并使用十六进制转储实用程序(例如 Linux 上的 od)查看字符的编码方式。这将帮助您区分上述 1) 和 2) 的原因。

(也有可能你两个都有问题...)

java文件(编辑器)的编码(和javac编译器最好使用的编码都是UTF-8,一般是IDE或者项目设置。

人们可能会通过对这些字符进行 u 转义来检查两种编码是否相等:\u251C 等等,

System.out 必须使用操作系统编码。如果该编码无法转换这些字符,则可能会看到 ?。如果控制台是 IDE 的控制台 emulation,您可能会搜索该编码的设置。还要检查控制台字体是否包含这些图形字符。 运行 IDE 和 java -Dfile.encoding UTF-8 可能会有帮助。

你的情况:奇怪。使用 gedit 检查源编码,dump System.getProperty("file,encoding").