0

我有以下模块:

# encoding: utf-8
module RandomNameModule

    def self.doesNothing(word)
        str = ""
        word.codepoints{|val|
            str << val.chr
        }
        return str
    end
end

和以下测试:

# encoding: utf-8
require 'test/unit'
require '../src/RandomNameModule.rb'

class RandomNameTests < Test::Unit::TestCase
    def testDoesNothing
        sorted = WordSort.word_sort("£$&")
        assert_equal("£$&", sorted)
    end
end

当我运行测试时,我得到一个断言失败:

<"£$&"> expected but was
<"\xA3$&">.

这是因为"£".codepoints{|x| x.chr}返回值\xA3

我怎样才能使这个回报£

4

1 回答 1

4

Integer#chr如果您没有明确告诉它使用什么编码,则示例中使用的方法似乎默认为 ASCII:

def self.doesNothing(word)
  str = ""
  word.codepoints { |val| str << val.chr("utf-8") }
  str
end

此外,使用String#each_char代替也String#codepoints可以正常工作:

def self.doesNothing(word)
  str = ""
  word.each_char { |val| str << val }
  str
end
于 2011-04-16T14:01:30.483 回答