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

голоса
1

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

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

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

PS Я использую Ruby 1.8

PS Я имею в виду сравнить этот путь:

result = case utf8string
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Задан 09/12/2008 в 17:16
источник пользователем
На других языках...                            


3 ответов

голоса
2

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

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

Q: Что такое BOM?

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
Ответил 10/12/2008 в 09:34
источник пользователем

голоса
1

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

Ответил 11/12/2008 в 10:57
источник пользователем

голоса
0

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

result = case utf8string.mb_chars
   when 'АБВ': 1
   when 'ГДИ': 2
   when 'ЙКЛ': 3
   when 'МНО': 4
   else 5
end
Ответил 09/12/2008 в 22:18
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more