[ruby-list:46470] Re: encodingに関する問題?

From: "NARUSE, Yui" <naruse@...>
Date: 2009-10-18 10:46:26 UTC
List: ruby-list #46470
成瀬です。

askar wrote:
> お世話になっています。アスカルです。
> 
> 久保秋 真氏の作りながら学ぶRUBY入門という本を演習しています。
> 
> 使っているエディターはTextWranglerです。
> 
> ex517.rbという演習は下記の通りです:
> 
> #! ruby -Ks
> # -*- coding* Windows-31J -*-
> 
> fruits_prices =[["apple", 200],["orange", 100],["melon", 600]]
> 
> fruits_prices.each { |fp|
>     puts "名前: #{fp[0]}、値段:#{fp[1]}円"
> }
> 
> sum=0
> fruits_prices.each {|fp| sum += fp[1]}
> puts "1個ずつ買うと全部で#{sum}円です。"
> 
> 質問:
> 1)EncodingはJapanese-Shiftで実行されますが、日本語が文字化けする。

この手の問題の場合は毎回自分の環境を書くべきです。
幸い、直前のメールで Mac だということが分かっていますが。
で、Mac はコンソールのエンコーディングが UTF-8 になっているので、
-Ks やマジックコメントで指定している Windows-31J (シフトJIS の Windows 版)
では化けてしまいます。

> UTF-8にするとプラグラムが実行されず:
> /Users/askar/Documents/programming/ruby/ex517.rb:1:   Invalid char
> `\357' in expression
> /Users/askar/Documents/programming/ruby/ex517.rb:1:   Invalid char
> `\273' in expression
> /Users/askar/Documents/programming/ruby/ex517.rb:1:   Invalid char
> `\277' in expression
> というエラーが生じる

Windows-31J として書かれているものを UTF-8 で実行しようとしたので、
当然エラーが出ます。

> 2)プラットフォーム関係なく共通なencodeの設定は可能でしょうか。

Mac のコンソールのエンコーディングをシフトJISに合わせるか、
プログラムのエンコーディングを UTF-8 に変えるかの二択ですね。

前者はコンソールの設定から変えられたはずです。
後者の場合は多分 TextWrangler に文字コードを指定して保存する機能があるので、
1 行目を -Ku にし、2行目を UTF-8 にした上で、UTF-8 として保存すればいいでしょう。

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

In This Thread