[ruby-list:47801] Re: [].join.encoding # => #<Encoding:ASCII-8BIT>

From: "NARUSE, Yui" <naruse@...>
Date: 2011-01-31 07:40:55 UTC
List: ruby-list #47801
成瀬です。

2011年1月31日16:22 KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp>:
> きしもとです
>
>> sora_hです。
>>
>> 2011/1/31 5.5 <5.5@moji.gr.jp>:
>> >> ここはString#encode ではなく、String#force_encoding を使うべきです。
>> >
>> > "".force_encoding("ASCII-8BIT") と "".encode("ASCII-8BIT") は
>> > 違うのでしょうか?
>> http://rurema.clear-code.com/1.9.2/method/String/i/force_encoding.html
>>
>> force_encodingでは、エンコード作業をせずにエンコーディング情報だけを変更します。
>> 間違えて認識された文字列のエンコーディングを変更することですね。
>
> force_encoding は self を変更します(encode! も self を変更します)。
> encode は self からエンコーディング変換をした新しい文字列を返します。

String#force_encoding はエンコーディングの「指定」、
String#encode はエンコーディングの「変換」なので意味が違います。
この意味の違いは、"\u3042".encode("ascii-8bit") あたりで明確な違いになります。

なお、String#force_encodingを非破壊的に使いたいときは
str.dup.force_encoding("US-ASCII") などと使います。


-- 
NARUSE, Yui  <naruse@airemix.jp>

In This Thread