Сравнение строкового оператора Ruby 1.8 и UTF-8

У меня есть задача Rake (в каталоге lib/tasks), которую я запускаю с помощью cron на моем общем веб-хостинге. Проблема в том, что я хочу сравнить строку UTF-8, используя регистр, но мой исходный код не закодирован в UTF-8. Если я сохраняю исходный код как UTF-8, при попытке запустить его возникает ошибка :(

Что я должен сделать?

Можно ли прочитать эти строки из внешнего текстового файла UTF-8?

P.S. Я использую Руби 1.8

P.S. Я имею в виду сравнение таким образом:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end

person Julian Popov    schedule 09.12.2008    source источник


Ответы (3)


Я бы сказал, что вам нужно сменить текстовый редактор, поскольку спецификация не нужна для UTF-8. UTF-8 не зависит от порядка байтов. Подробнее см. текст ссылки.

person Keltia    schedule 11.12.2008

Я обнаружил, что моя проблема не в случае заявления

Проблема заключалась в том, что когда я сохраняю свой исходный код в формате UTF-8, мой текстовый редактор добавляет 3 байта (BOM) в начале, чтобы указать, что кодировка UTF-8.

В: Что такое спецификация?

A: Метка порядка байтов (BOM) состоит из кода символа U+FEFF в начале потока данных, где ее можно использовать в качестве подписи, определяющей порядок байтов и форму кодирования, прежде всего немаркированные текстовые файлы. В некоторых протоколах более высокого уровня использование спецификации может быть обязательным (или запрещенным) в потоке данных Unicode, определенном в этом протоколе.

UTF-8, UTF-16, UTF-32 и спецификация

Ошибка, которую я получаю, была:

1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
person Julian Popov    schedule 10.12.2008

Попробуйте использовать метод mb_chars из среды Rails ActiveSupport:

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
person John Topley    schedule 09.12.2008