[#48382] Ruby/Gstreamer for Windows — ashbb <ashbbb@...>

こんにちは。

17 messages 2011/09/22
[#48383] Re: Ruby/Gstreamer for Windows — Kouhei Sutou <kou@...> 2011/09/23

須藤です。

[#48385] Re: Ruby/Gstreamer for Windows — ashbb <ashbbb@...> 2011/09/23

須藤さん

[#48392] 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...>

前略

21 messages 2011/09/24
[#48393] Re: 要素のない配列の挙動? — TADA Tadashi <t@...> 2011/09/24

ただただしです。

[#48394] Re: 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...> 2011/09/24

ただただし さん

[#48399] Re: 要素のない配列の挙動? — nonta@... 2011/09/24

野田と申します。

[#48400] Re: 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...> 2011/09/24

皆さま

[ruby-list:48370] Re: IO#set_encoding における改行コードの扱い?

From: 俊(とし) <toshio.otaguro@...>
Date: 2011-09-17 11:26:15 UTC
List: ruby-list #48370
なかむら(う)さん,

早速のご回答ありがとうございました.

IO でバイナリーモードというのはこれまで全く使ったことがなく,バイナリファイル(単なるバイトストリーム)を扱うためのもの,と思っておりました.改行コードの変換を行わない,という機能があるのは私にとっては新しい知見です.さっそく試してみたいと思います.

ありがとうございました.

-- 
俊(とし)


2011年9月17日15:11 U.Nakamura <usa@garbagecollect.jp>:
> こんにちは、なかむら(う)です。
>
> In message "[ruby-list:48368] IO#set_encoding  における改行コードの扱い?"
>    on Sep.17,2011 14:22:59, <toshio.otaguro@gmail.com> wrote:
>> 改行コードは $\ で指定できることは知っているのですが,IO#set_encoding と改行コードは
>> 独立なのでしょうか?
>
> はい。
>
>>
>> その場合,入力ファイルの改行コードと同じ改行コードで出力するためのスマートな方法は
>> ないでしょうか?
>
> IOには改行コードを取り扱う「モード」という状態がありまして、
> 具体的には「テキストモード」というものと「バイナリモード」と
> いうモードが存在します。
> 「バイナリモード」というのは入出力時に改行コードの変換を行わ
> ないモード、「テキストモード」というのは変換を行うモード、で
> す。
> Windowsにおけるデフォルトのモードはテキストモードです。
>
> あなたの例では特にこのモードを操作していませんから、inpと$stdout
> の両方がテキストモードです。
> たいへんよい状態ですね :)
>
> さて、あなたの本当の希望は「同じ改行コードで出力する」ではな
> く、「入力時、出力時、共に改行コードを変換しない」のはずです。
> というわけで、inpと$stdoutの両方をバイナリモードに変更するの
> が正しい対処法となります。
> IO#binmodeがそれを行うメソッドです。
>
> なお、IO#set_encodingはエンコーディングのみを変更してモードは
> 変更しませんが、IO#binmodeはモードをバイナリモードに変更する
> と同時にエンコーディングをASCII-8BITに変更する、という機能を
> 持ちます。
> 従って、IO#set_encodingとIO#binmodeの実行順序には注意を払う必
> 要があります。
>
>
> ところで、既にオープン済みである$stdoutはともかく、今からオー
> プンしようとしているファイルについては、わざわざ後でメソッド
> を呼ばなくても、オープン時にモードやエンコーディングを指定す
> ることができます。
> 具体的には、
>  inp = open(filename, "rb:UTF-8")
> で、
>  inp = open(filename, "r")
>  inp.binmode
>  inp.set_encoding("UTF-8")
> と同じ効果を得ることができます。
>
>
> それでは。
> --
> U.Nakamura <usa@garbagecollect.jp>

In This Thread

Prev Next