Ruby 为什么我会得到编码::CompatibilityError和#inspect?

Ruby 为什么我会得到编码::CompatibilityError和#inspect?,ruby,encoding,inspect,Ruby,Encoding,Inspect,以下代码工作正常: #encoding: utf-8 class Text def initialize(txt) @txt = txt end def inspect "<Text: %s>" % @txt end end p Text.new('Hello World') 为什么会这样 更重要的是:我如何避免它?错误消息已经解释了原因: 检查结果必须仅为ASCII或使用默认外部编码 在本例中,inspect命令获取UTF-8字符(不是ASCII

以下代码工作正常:

#encoding: utf-8
class Text
  def initialize(txt)
    @txt = txt
  end
  def inspect
    "<Text: %s>" % @txt
  end
end

p Text.new('Hello World')
为什么会这样


更重要的是:我如何避免它?

错误消息已经解释了原因: 检查结果必须仅为ASCII或使用默认外部编码

在本例中,inspect命令获取UTF-8字符(不是ASCII),但默认编码似乎是另一种。 默认编码可以在
encoding.default\u external
中读取

为避免错误,必须对检查结果进行编码:

#encoding: utf-8
class Text
  def initialize(txt)
    @txt = txt
  end
  def inspect
    #force ASCII and replace invalid/undefined characters
    ("<Text: %s>" % @txt).encode('ASCII', :undef => :replace, :invalid => :replace)
  end
end

p Text.new('Hä, was soll das?') #-> <Text: H?, was soll das?>
#encoding: utf-8
class Text
  def initialize(txt)
    @txt = txt
  end
  def inspect
    #force ASCII and replace invalid/undefined characters
    ("<Text: %s>" % @txt).encode('ASCII', :undef => :replace, :invalid => :replace)
  end
end

p Text.new('Hä, was soll das?') #-> <Text: H?, was soll das?>
("<Text: %s>" % @txt).encode(Encoding.default_external, :undef => :replace)