【发布时间】:2011-09-23 19:32:49
【问题描述】:
如何在 Windows 上的 Ruby 中仅将一个 0x0A 字符写入 STDOUT。只有一个,没有 0x0D。
@EDIT:谢谢大家!我知道二进制/文本模式的概念,但不知道如何在 Ruby 解释器中处理这个问题。解决方案是使用STDOUT.binmode。
如何使用平台无关代码将 STDOUT 切换回文本模式是一个悬而未决的问题。
【问题讨论】:
如何在 Windows 上的 Ruby 中仅将一个 0x0A 字符写入 STDOUT。只有一个,没有 0x0D。
@EDIT:谢谢大家!我知道二进制/文本模式的概念,但不知道如何在 Ruby 解释器中处理这个问题。解决方案是使用STDOUT.binmode。
如何使用平台无关代码将 STDOUT 切换回文本模式是一个悬而未决的问题。
【问题讨论】:
这是由于“虚拟换行符”。在 (Ruby) IO 层,此功能负责将“\n”(0x0A,LF)映射到/来自Operating Systems definition of a newline。 Windows 将“\n”映射到 CR+LF(而“\n”在类 Unix 系统中未更改地映射到 LF)。
使用ios.binmode 将流置于禁用“虚拟换行”模式的二进制模式。这对于处理图像等二进制流也非常重要;-)
编码愉快。
【讨论】:
IO.reopen 是否带有binmode 标志,但这可能是其他尝试。