[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44438] Re: Text Encoding in Ruby 1.9.0

From: Yukihiro Matsumoto <matz@...>
Date: 2008-01-05 03:17:56 UTC
List: ruby-list #44438
まつもと ゆきひろです

In message "Re: [ruby-list:44436] Text Encoding in Ruby 1.9.0"
    on Sat, 5 Jan 2008 11:33:04 +0900, "Hideo Konami" <konami@kyoto-wu.ac.jp> writes:

|1. ruby のオプションの -Ku があるかないかで,ソースの中の
| 文字列リテラルのエンコーディングが UTF-8 になるか 
|  ASCII-8BIT になるのかが決定されるという理解で正しいの
| でしょうか。

-Kは1.8互換のオプションで推奨されません。-Kuを指定すると、

 * スクリプトのデフォルトのエンコーディング
 * 入力のデフォルトのエンコーディング

がUTF-8になります。また-Kや-Eなどエンコーディングを指定するオ
プションがまったく指定されないと、スクリプトのエンコーディン
グのデフォルトは「ASCII-8BIT」になります。また、入力のデフォ
ルトのエンコーディングはlocaleから決定されます。小波先生の場
合には「UTF-8」のようですね。

|2. force_encoding は破壊的にエンコーディングを変更する仕様
| になっているようですが,それはむしろ force_encoding! の
| ほうがよかったのはないでしょうか。 "force" に "!" がすで
| に入っている?非破壊的なメソッドもあるべきだと思うのです
| が。

force_encodingは文字列の内容とは無関係にエンコーディング情報
を書き換える(内容の変換などは一切しない)という意味で「普通の
人」が使うメソッドではないと考えています。ので、使いやすさな
どを考慮して2バージョンを用意するなどの配慮は行っていません。

|3. EUC-JP のテキストを読み込んだはずなのに,そのテキストが
|  encoding が UTF-8 を返すのはへんだと思うのですが,どうい
| う考えでそうなるのでしょうか。SJIS, JIS のテキストでもやは
| り同様の動作になっています。

先生のプログラムでは読み込むファイルのエンコーディングが
「EUC-JP」であるとはどこにも指定していませんから、Rubyにはそ
れが「EUC-JP」であると知る手段がありません。ですから、locale
にしたがい、入力データは基本的に「UTF-8」なのだと信じるしかな
いわけです(間違いの可能性が否定できず、間違えると悲惨なことに
なる自動判別は組み込みではサポートしていません)。

明示的に指定する場合には、openの部分を

  open("text_euc.txt")

から

  # 「EUC-JP」エンコーディングを付与する場合
  open("text_euc.txt", "r:euc-jp")

または

  # 「EUC-JP」ファイルを「UTF-8」に変換して読み込む場合
  open("text_euc.txt", "r:euc-jp:utf-8")

としてください。

|4. transcode.c には str.encode(encoding), str.encode!(encoding)
|  というのがあり,これらは force_encoding(encoding) とだいたい同義
| だと思ったのですが,違うようです。もう少し調べてみようとは思い
| ますが,どう使うべきものか教えていただけると幸いです。

encodeメソッドは文字列の内容を変換します。内容に関らず単にエ
ンコーディングの情報を書き換えるforce_encodingとは目的からし
て違います。

                                まつもと ゆきひろ /:|)

In This Thread