【问题标题】:How to write just one 0x0A character to STDOUT in Ruby on Windows?如何在 Windows 上的 Ruby 中仅将一个 0x0A 字符写入 STDOUT?
【发布时间】:2011-09-23 19:32:49
【问题描述】:

如何在 Windows 上的 Ruby 中仅将一个 0x0A 字符写入 STDOUT。只有一个,没有 0x0D。

@EDIT:谢谢大家!我知道二进制/文本模式的概念,但不知道如何在 Ruby 解释器中处理这个问题。解决方案是使用STDOUT.binmode

如何使用平台无关代码将 STDOUT 切换回文本模式是一个悬而未决的问题。

【问题讨论】:

    标签: ruby windows


    【解决方案1】:

    这是由于“虚拟换行符”。在 (Ruby) IO 层,此功能负责将“\n”(0x0A,LF)映射到/来自Operating Systems definition of a newline。 Windows 将“\n”映射到 CR+LF(而“\n”在类 Unix 系统中未更改地映射到 LF)。

    使用ios.binmode 将流置于禁用“虚拟换行”模式的二进制模式。这对于处理图像等二进制流也非常重要;-)

    编码愉快。

    【讨论】:

    • 在那之后有什么办法可以将 STDOUT 切换回文本模式?只是好奇
    • @ZAB:来自精美手册(pst 链接到):“一旦流处于二进制模式,它就不能重置为非二进制模式。”
    • @ZAB 虽然无法重置 binmode,但应该可以在非二进制模式下打开 new IO 对象(到相同的底层 fd)。但是,我没有尝试过。我不确定IO.reopen 是否带有binmode 标志,但这可能是其他尝试。
    • @user166390,谢谢!我从来不知道文本模式和二进制模式之间有什么区别,也不知道为什么 ruby​​ 脚本的管道二进制输出被破坏了。拯救了我的夜晚!
    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2017-04-06
    • 2011-11-02
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多