Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
« :: »
2009/02/21

Win32のRubyで改行がCR+LFになってしまう

  ruby 
このエントリーをはてなブックマークに追加

LinuxやCygwinでは問題ないものの、Win32版のRubyでファイルの書き出しを行うと、改行コードがCR+LFになってしまうという問題でちょっとはまってしまったので忘れないようにメモ。
結論としては、ファイルをテキストモードとして開いていたのが原因でした。

たとえば、下記のようなコードを実行するとLinuxでは改行がLF(\n)になるのに対して、Win32ではCR+LF(\r\n)になります。

#!/bin/rubyopen("foo.txt", "w") {|f| f.write("bar\nbuzz")}

Win32の実行結果をodした結果

$ od -c foo.txt0000000 b a r \r \n b u z z0000011

Linuxの実行結果をodした結果

$ od -c foo.txt0000000 b a r \n b u z z0000010

そういえばずっと昔、Perlでもはまったような気がする・・・・

どう考えてもファイルの書き込み時に\n → \r\nの変換が自動的に行われているようにしか見えないことと、WindowsとLinuxのプラットフォーム的な違いによって発生している(としか思えない)ことから、よくよく考えてみるとWindowsにはファイルにテキストモードとバイナリモードがあることを思い出しました。大昔、Windows上でPerlを動かしたときにもはまった記憶がありますが、すっかり忘れてしまっていました。

ということで、プログラムを以下のように書き換えると無事Win32でも改行がLFのファイルを書き出すことができました。

#!/bin/rubyopen("foo.txt", "wb") {|f| f.write("bar\nbuzz")}

Rubyのリファレンスではこれくらいしか触れられていないので、もうちょっと解説しておいてくれるといいんですけどね。

組み込み関数 - Rubyリファレンスマニュアル

これらのいずれに対しても "b" フラグを("r+b"のように)つけることができます(整数なら File::BINARY)。この場合、バイナリモードでオープンします(ただし、システムがテキスト/バイナリでファイルを区別する場合に限ります)

    byhsur at 21:40[4年前][3年前][2年前][1年前][1年後][2年後][3年後][4年後][5年後] |
    こんな記事もあります 「バイナリ rubyopen LF
    福岡銀がデマの投稿者への刑事告訴を検討中
    SeleniumWrapperVBA でブラウザを Excel から制御する
    えきねっとのフィッシングサイトが検索トップになっていることが問題に
    Wi-Fi ルーターは暖房がついてる部屋に置こう
    卒研データ用統計解析ツール「College Analysis」
    Realforce R3S が登場
    Realforce R3 のファームウェアアップデートに失敗したら
    米政府が 1 人あたり 1 万ドルの学生ローンを棒引き
    Adaptec USBXchange + Panasonic LF-D100J を動かしたい
    Astage NCボックス #13
    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/2935
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL:Yahoo! JAPAN IDでログイン

    « :: »
    Copyright © 2004-2023 by CLES All Rights Reserved.
    サイト内検索
    検索ワードランキング
    へぇが多いエントリ
    閲覧数が多いエントリ
    1 .アーロンチェアのポスチャーフィットを修理(99669)
    2 .年次の人間ドックへ(99084)
    3 .福岡銀がデマの投稿者への刑事告訴を検討中(99073)
    4 .三菱鉛筆がラミーを買収(98684)
    5 .2023 年分の確定申告完了!(1つめ)(98652)
    最新のエントリ
    cles::blogについて
    誰が書いてる?
    最近行った場所
    サイトポリシー
    タグ一覧
    検索ワードランキング

    Referrers

      Powered by CLES
      Nucleus CMS v3.31SP3/w memcached
      21375756(W:6381 Y:1545 T:1575)
      cles::blogのはてなブックマーク数
      benchmark


      [8]ページ先頭

      ©2009-2025 Movatter.jp