Строка UTF-8 в рубине - PullRequest
       34

Строка UTF-8 в рубине

0 голосов
/ 16 апреля 2011

У меня есть следующий модуль:

# 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

как я могу сделать это возвращение £

1 Ответ

4 голосов
/ 16 апреля 2011

Метод 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
...