diary2021-08-23Ruby(Windows)で改行付き文字列データを扱う場合はテキストモード(バイナリモード)に気をつけろ!!RubyはじまりRubyに限った話ではないのかもしれないですが、Rubyで改行を含むテキストデータを送受信するようなプログラムをWindowsで書いていた時に思った通りに処理されなくて嵌ってしまったので、自戒を込めてブログに残しておきます。以下のようなプログラムがあったとします。charend以下のようにコマンドプロンプトから実行してみます。read.rb出力は以下のようになります。変換されてしまっています。そのような変換をかけるために発生します。これに対応するには2種類の方法があります。IOオブジェクトをバイナリモードに設定するためのメソッドになります。特有のモードのようで、通常はテキストモードになっています。このモードを変更すると改行の処理が変化します。入力されたものとして処理されます。別々に処理されるようになります。Rubyのリファレンスマニュアルにも記載されています。テキストモードとバイナリモードという2種類のモードが存在します。エンコーディングとは独立です。改行の変換にしか影響しません。上記のコードを実行した出力を見てみましょう。どちらも以下の通り同じ出力になります。"1""\r""2""\r""\n""3""\r""\r""\n"なにかおかしいですね。これは先ほど説明したWindowsのIOモードの問題が出力側に残っているのが原因です。