如果我打印
System.out.println("│ ├── └──");
我只看到问号(???)。接缝这是编码问题的王者之一。任何想法如何解决这个问题?
答案 0 :(得分:2)
使用UTF-8代码而不是实际字符。例如├是\ u251c。
以下链接可帮助您将字符转换为相应的代码:http://www.cylog.org/online_tools/utf8_converter.jsp
希望它有所帮助!
答案 1 :(得分:1)
任何想法如何解决这个问题?
您的问题有两个可能的原因:
1)编辑源代码时可能会发生这种情况。编译器可能正在使用与编辑时使用的文件编码不同的文件编码来读取源代码。如果您没有指定源文件编码,编译器将使用特定于平台的默认值,这可能不是正确的默认值。
对此的修复是调整编译器设置以指定正确的源文件编码。你如何做到这将取决于你如何编译。如果使用javac
从命令行进行编译,请使用-encoding
选项。
或者,此问题的解决方法是使用Unicode转义替换源代码中的违规行为。例如:
String s = "\u251c";
应该给你一个由"├"组成的字符串。字符。我会建议解决方法。包含非ASCII字符的源代码总是对编辑和编译的方式敏感......这不是一件好事。
2)可能会发生这种情况,因为Java运行时平台的默认输出编码与显示输出的实际编码之间存在不匹配。
解决此问题的方法之一是:
-Dfile.encoding=UTF-8
)或哪个最好取决于具体情况;例如为什么事情是错误的"首先。
值得从命令提示符运行此测试应用程序,以查看问题是否也存在。如果是,则将标准输出重定向到文件,并使用十六进制转储实用程序(例如Linux上的od)来查看字符的编码方式。这将有助于您区分上述原因1)和2)。
(你也有可能遇到两个问题......)
答案 2 :(得分:1)
java文件的编码(编辑器(以及javac编译器更好地使用UTF-8的编码。这通常是IDE或项目设置。
有人可能通过u-escaping这些字符来检查两种编码是否相等:\u251C
等等,
System.out必须使用操作系统编码。如果该编码无法转换这些字符,则可能会看到?
。如果控制台是IDE的控制台仿真,则可以搜索该编码的设置。还要检查控制台字体是否包含这些图形字符。使用java -Dfile.encoding UTF-8
运行IDE可能会有所帮助。
在您的情况下: 奇怪。使用gedit检查源编码,转储System.getProperty("file,encoding")
。