Rails 2.3.2 / Ruby 1.8.6 Вопрос о кодировке - ActionController возвращает UTF-8? - PullRequest
1 голос
/ 16 февраля 2011

У меня довольно простой вопрос Rails относительно кодировки, на который я не могу найти ответ.

Среда: Rails 2.3.2 / Ruby1.8.6

Я не задаю никакой кодировкипараметры в среде Rails в настоящее время оставили все по умолчанию.

Если я читаю String с диска из текстового файла - и отправляю его через Rails render: текстовые функции с использованием Apache / Phusion, какую кодировку должен использовать клиентожидаете?

Спасибо за любые ответы,

1 Ответ

1 голос
/ 01 марта 2011

Начиная с Rails 1.2, Rails устанавливает для магической переменной $ KCODE в Ruby 1.8 значение "UTF8".Он включает ActiveSupport :: CoreExtensions :: String :: Multibyte для исправления проблем, связанных с неоднозначными операциями для каждого символа или байта.Ваш текстовый файл должен быть UTF-8, Ruby пропустит его, а в макете приложения должен быть указан тег META, объявляющий кодировку документа также UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Тогда все должно «просто работать».', но есть некоторые ошибки, описанные ниже.

Если вы работаете на Mac, запустите «script / console» в Terminal.app, а затем вставьте необычные последовательности символов прямо в терминал, например, из Character Viewer.хороший способ поиграть и продемонстрировать это к своему собственному удовлетворению, поскольку вся ОС работает в UTF-8.Я не знаю, какой эквивалент будет для Windows или произвольного дистрибутива Linux.

Например, "⇒" - RIGHTWARDS DOUBLE ARROW - это Unicode 21D2, UTF8 0xE2 (226), 0x87 (125),0x92 (146).Если я вставлю это в Терминал и запросю байтовые значения, я получу ожидаемый результат:

>> $KCODE
=> "UTF8"
>> "⇒"
=> "\342\207\222"
>> puts "⇒"
⇒

... но ...

>> "⇒"[0]
=> 226
>> "⇒"[1]
=> 135
>> "⇒"[2]
=> 146
>> "⇒"[3]
=> nil

Обратите внимание, что вы все еще получаетедоступ к байту с "[]".См. Документацию по многобайтовым расширениям в Rails API (для Rails 2.2, например, по адресу http://railsapi.com/), если вы хотите выполнять строковые операции, в противном случае такие вещи, как "foo.reverse", будут работать неправильно; "foo.mb_chars".reverse "делает это правильно, используя прокси" mb_chars ".

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