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)