Сравнение строкового оператора Ruby 1.8 и UTF-8
-
20-08-2019 - |
Вопрос
У меня есть задача 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
Решение
Я бы сказал, что вам нужно сменить текстовый редактор, поскольку спецификация нет необходим для UTF-8.UTF-8 не зависит от порядка байтов.Видеть текст ссылки для получения подробной информации.
Другие советы
Я обнаружил, что моя проблема не в операторе случая
Проблема заключалась в том, что когда я сохраняю исходный код в формате UTF-8, мой текстовый редактор добавляет в начале 3 байта (BOM), чтобы указать, что кодировка UTF-8.
Вопрос:Что такое спецификация?
А: Оценка байта (BOM) состоит из кода символа U+FEFF в начале потока данных, где его можно использовать в качестве подписи, определяющей порядок байта и форму кодирования, в первую очередь из безымянных файлов открытого текста.В соответствии с некоторыми протоколами более высокого уровня использование BOM может быть обязательным (или запрещено) в потоке данных 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
Попробуйте использовать mb_chars
метод из Rails Активная поддержка рамки:
result = case utf8string.mb_chars
when 'АБВ': 1
when 'ГДИ': 2
when 'ЙКЛ': 3
when 'МНО': 4
else 5
end