java - Java 中的转义字符与平台相关吗?

标签 java escaping format printf

我刚刚读了这个关于比较“%n”和“\n”的问题

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

答案证实 %n 可以跨平台使用,而\n 则不能。所以我想知道其他转义字符如何,例如\t 、\b、\'、\"、\\...。它们是否都像\n 一样依赖于平台?

最佳答案

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

唯一的(理论上的)问题可能是某些 native 字符集没有办法表示这些代码点/字符的等效项。我很确定您可以熟悉 50 多年前的古老 6 位和 5 位字符集。

<小时/>

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

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

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

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

当您将这些字符发送到显示器或将它们包含在文件中时,将会“发生”什么,也存在一些不确定性/可变性。但这并不是 Java 的错,也不是 Java 可以解决的任何问题。

<小时/>

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

关于java - Java 中的转义字符与平台相关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16334125/

相关文章:

java - 基于时间对对象进行排序并避免显式 NULL 检查

java - 存储信息并从 currentThread 获取信息

java - 字符串常量池 vs 字符串池

尽管我正在执行 str.decode(),但 Python 会抛出 UnicodeEncodeError。为什么?

PHP 无法正确转义我的字符串

R 从日期时间中提取日期

java - java调用外部程序超时

vba - 货币检查是欧元还是美元

r - 在R中如何绘制时间与日历日期的关系

java - 如何在 Scala 中反转义字符串?