恋するプログラム(Ruby)について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ksk0629
記事: 16
登録日時: 10年前

恋するプログラム(Ruby)について

#1

投稿記事 by ksk0629 » 9年前

現在、恋するプログラムを参考にして、Rubyにて人口無能の勉強をしています。
WindowsのCygwinにて取り組んでいるのですが、以下のコードにてエラーが発生します。
何を言われているのかはなんとなくわかるのですが、うまく直せません。
アドバイスお願いします。

コード:

#! ruby -Ks
# coding: utf-8

class Responder
  def initialize(name)
    @name = name
  end

  def response(input)
    return "#{input}って何?"
  end

  def name
    return (@name)
  end
end

class Unmo
  def initialize(name)
    @name = name
    @responder = Responder.new("What")
  end

  def dialogue(input)
    return (@responder.response(input)
  end

  def responder_name
    return (@responder.name)
  end

  def name
    return (@name)
  end
end

def prompt(unmo)
  return unmo.name + ':' + unmo.responder_name + '>'
end

puts "Unmo System prototype : proto"
proto = Unmo.new("proto")
while true
  print "> "
  input = gets
  input.chomp!
  break if input == ""

  response = proto.dialogue(input)
  puts(prompt(proto) + response)
end
エラーの内容は以下のようなものです

$ ruby proto.rb
Unmo System prototype : proto
> おっす
proto.rb:11:in `response': incompatible character encodings: Windows-31J and UTF-8 (Encoding::CompatibilityError)
from proto.rb:26:in `dialogue'
from proto.rb:50:in `<main>'

ちなみに試した方法は

コード:

#! ruby -Ks

コード:

#! ruby -E Windows-31J:utf-8
とする事です。

アバター
びす
記事: 31
登録日時: 13年前

Re: 恋するプログラム(Ruby)について

#2

投稿記事 by びす » 9年前

よくあるパターンとしては、ソースコードをBOM付きUTF-8で保存しているかもしれないですね
BOMがついていないか確認してみてください

ksk0629
記事: 16
登録日時: 10年前

Re: 恋するプログラム(Ruby)について

#3

投稿記事 by ksk0629 » 9年前

びす さんが書きました:よくあるパターンとしては、ソースコードをBOM付きUTF-8で保存しているかもしれないですね
BOMがついていないか確認してみてください
今確認してみました。
emacsにてinit.elファイルを確認したところ、
utf-8-unix
となっていました。
bom付きは
utf-8-ws-unix
であるため、bomはついていないと考えられます。

ksk0629
記事: 16
登録日時: 10年前

Re: 恋するプログラム(Ruby)について

#4

投稿記事 by ksk0629 » 9年前

コード:

#! ruby -Ku
# -*- mode:ruby; coding:utf-8 -*-

class Responder
  def initialize(name)
    @name = name
  end

  def response(input)
    return "#{input}って何?"
  end

  def name
    return (@name)
  end
end

class Unmo
  def initialize(name)
    @name = name
    @responder = Responder.new("What")
  end

  def dialogue(input)
    return (@responder.response(input))
  end

  def responder_name
    return (@responder.name)
  end

  def name
    return (@name)
  end
end

def prompt(unmo)
  return unmo.name + ":" + unmo.responder_name + ">"
end

puts "Unmo System prototype : proto"
proto = Unmo.new("proto")
while true
  print "> "
  input = gets
  input.chomp!
  break if input == ""

  response = proto.dialogue(input)
  puts(prompt(proto) + response)
end
にした結果。直りました。
しかししっかりとした理由がわかりません。
最初の宣言が
-Ks(JSIS)
となっており間違っていたからなのでしょうか?
わかる方、解凍お願いいたします。

閉鎖

“C言語何でも質問掲示板” へ戻る