【问题标题】:Java Formatter class %c %C conversion on console控制台上的 Java Formatter 类 %c %C 转换
【发布时间】:2015-12-15 14:18:43
【问题描述】:

根据 Oracle 的官方文档,http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html %c 或 %C 运算符应该打印一个 Unicode 字符。但是,像这样的代码模拟,

System.out.format("%1$c", 97);
产生字符“a”,这是按照 ASCII 值。任何大于 255 的值都会导致 '?'

EDIT 您可以通过任何其他方式(例如在控制台上)打印 Unicode 字符吗?

我能得到的最接近的方法是将字符集显式传递给 OutputStream

char[] toWirte = {913,914,915,916};
OutputStream out = new BufferedOutputStream(new FileOutputStream("test.txt"));
out.write(new String(toWirte).getBytes("UTF-16"));

我猜,Writer 实现隐含地将 UTF-8 假定为字符集。

有没有人知道其他方法。

【问题讨论】:

  • 对于 0-127 的代码,Unicode 和 ASCII 是相同的。
  • 这不是bug,Oracle没有出错;你只是误解了它是如何工作的。不要费心向 Oracle 报告。
  • 很可能是因为您打印结果的控制台窗口不支持您尝试打印的字符。
  • 尝试通过控制台和文件而不是 IDE 输出。还是一样。

标签: java utf-8 utf-16 formatter


【解决方案1】:

看看Unicode码表:

http://www.unicode.org/charts/PDF/U0000.pdf

十进制 97 是十六进制 61,定义为字符 'a'。如注释中所述,代码点 0 到 127(00 到 7F)在 Unicode 中的定义与 ASCII 相同。这是为了兼容性和更容易迁移。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 2011-01-13
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2015-09-30
    • 2020-09-01
    相关资源
    最近更新 更多