是否与Java平台相关的转义字符?

时间:2013-05-02 09:04:22

标签: java escaping format printf

我刚刚阅读了有关比较“%n”和“\ n”

的问题

What's up with Java's "%n" in printf?

答案证实%n可以跨平台使用,而\ n则不是。所以我想知道其他转义字符如\ t,\ b,\',\“,\\ ....它们都是平台相关的,就像\ n?

3 个答案:

答案 0 :(得分:1)

\t \' \"\\很可能在所有平台上以相同的方式行事,因为它们代表真正的ASCII字符,并且没有多少平台可以做不实现完整的ASCII字符集。

\b - 这是另一回事。这几乎肯定不会在任何平台上做同样的事情,因为它应该实现BEL控制代码,它本身不是平台通用的。

你希望从问题中获得什么?

补充:似乎\ b退格 - 但仍然不太可能是跨平台的。

补充:至于\ f - 只是不要使用它,因为它可能只会在你更换你的打印机时做一些停止工作的东西 - 如果它真的做了什么的话。

答案 1 :(得分:1)

字符串转义码在所有平台上表示相同的含义。它们映射到指定的Unicode代码点,而这些代码点又对应于标准的7位ASCII控制字符。

唯一(理论上)关注点可能是某些本机字符集,它无法表示这些代码点/字符的等价物。我很确定你对50多年前古老的6位和5位字符集没问题。


但是,如果您尝试以平台首选形式输出文本,则需要考虑两件事:

  • 不同的平台使用不同的字符序列作为指定“行尾”的首选方式。 (或行分隔符......)

  • 默认的TAB停止位置因平台而异。在Windows上,它们每4个字符位置,Unix / Linux每8个字符。

因此,当您为固定宽度字符显示格式化数据时(例如在“控制台”上),您需要考虑这些平台依赖性。

当您将这些字符发送到显示器或将其包含在文件中时,还会出现一些不确定性/可变性。但这不是Java的错,也不是Java可以解决的任何问题。


相比之下,"%n" ...在格式字符串的上下文中...表示平台首选行分隔符。因此,在Linux / UNIX上,它表示"\n",在Windows上表示"\r",在Mac上表示"\r\n"。请注意,这仅适用于格式字符串;即String.format(...)的第一个参数,或其他符合格式化风格的参数。

答案 2 :(得分:0)

有些平台使用\r\n作为新行,其他一些\n。使用%n将确保在输出中发出正确的新行。

这与字符前面的反斜杠字符无关,以指定您提到的特殊字符。您可以在源代码中使用它。