Какие варианты существуют сейчас для реализации UTF8 в Ruby и RoR? - PullRequest
5 голосов
/ 02 октября 2008

После разработки Ruby я очень близко узнал, что в Ruby 1.9 реализована подробная кодировка символов. Мой вопрос на данный момент: как можно использовать Ruby в данный момент для связи с базой данных, которая хранит все данные в UTF8?

Предыстория: я участвую в новом проекте, где Ruby / RoR - по крайней мере вариант. Но проект должен опираться на интернационализированный набор символов (он распространяется на многие страны), предпочтительно UTF8.

Так как вы справляетесь с этим? Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 10 мая 2009

Ruby 1.8 отлично работает со строками UTF-8 для базовых операций со строками. В зависимости от потребностей вашего приложения некоторые операции могут либо не работать, либо работать не так, как ожидалось.

Например:

1) Размер строк даст вам байты, а не символы, так как поддержка многобайтовой поддержки пока отсутствует. Но вам нужно знать размер ваших строк в символах?

2) Не разбивать строку на границе символа. Но тебе это нужно? И т.д.

3) Порядок сортировки будет фанки, если отсортирован в Ruby. Хорошим вариантом является использование db для сортировки.

и т.д..

Комментарий автора о сортировке данных после прочтения из базы данных: как уже отмечалось, результаты, вероятно, не будут соответствовать ожиданиям пользователей. Таким образом, решение заключается в сортировке по БД. И все равно, как правило, это будет быстрее - базы данных предназначены для сортировки данных.

Краткое описание: мое приложение Ruby 1.8.6 RoR прекрасно работает с международными символами Юникода, которые обрабатываются и хранятся в современных браузерах как UTF-8. Языки справа налево тоже работают нормально. Основные проблемы: убедитесь, что ваша БД и все веб-страницы настроены на использование UTF-8. Если у вас уже есть некоторые данные в вашей базе данных, вам нужно будет пройти процесс преобразования, чтобы изменить их на UTF-8.

С уважением,

Larry

1 голос
/ 10 мая 2009

"Unicode ahoy! Хотя Rails всегда мог хранить и отображать юникод без говядины, было немного сложнее усечь, обратить вспять или получить точную длину строки UTF-8. Вам нужно было дурачиться с KCODE, и хотя множество людей заставили его работать, это было не так просто, как вы могли бы надеяться (или, возможно, даже ожидали).

Таким образом, поскольку в следующем году Ruby не будет поддерживать многобайтовую поддержку, Rails 1.2 вводит ActiveSupport :: Multibyte для работы со строками Unicode. Вызовите метод chars в вашей строке, чтобы начать работу с символами, а не байтами. " Нажмите здесь, чтобы получить больше

0 голосов
/ 02 октября 2008

Хотя я не проверял это, библиотека кодировки символов (в настоящее время в альфа-версии) добавляет методы в класс String для обработки UTF-8 и других. Его страница на RubyForge здесь . Он предназначен для Ruby 1.8.

Однако, по моему опыту, при использовании Ruby 1.8, если вы храните данные в своей базе данных как UTF-8, Ruby не будет мешать, пока ваша кодировка символов в заголовке HTTP - UTF-8. Возможно, он не сможет работать со строками, но ничего не сломает. Пример:

file.txt:
¡Hola! ¿Como estás? Leí el artículo. ¡Fue muy excellente!

Прошу прощения за мой плохой испанский; это был лучший пример Unicode, который я смог придумать.

in irb:
str = File.read("file.txt")
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\n"
str += "Foo is equal to bar."
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."
str = "    " + str + "    "
   => "    \302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar.    "
str.strip
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."

По сути, он будет обрабатывать UTF-8 как ASCII с нечетными символами в нем. Он не будет сортировать лексикографически, если кодовые точки не в порядке; однако, это будет сортировать по коду. Пример:

"\302" <=> "\301"
   => -1

Сколько вы планируете работать с данными в приложении Rails? Большая часть сортировки и т. Д. Обычно выполняется вашим механизмом базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...