Сравнение строкового оператора Ruby 1.8 и UTF-8 - PullRequest
1 голос
/ 09 декабря 2008

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

Что мне делать?

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 10 декабря 2008

Я обнаружил, что моей проблемы не было в случае оценки

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

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

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

UTF-8, UTF-16, UTF-32 & BOM

Я получил ошибку:

1: Invalid char `\357' in expression
1: Invalid char `\273' in expression
1: Invalid char `\277' in expression
1 голос
/ 11 декабря 2008

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

0 голосов
/ 10 декабря 2008

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

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