Проблема с Rails utf-8
Я там, я новичок в рубине (и рельсах) и имею проблемы som при использовании шведских букв в строках. В моем действии создайте переменную экземпляра следующим образом:
@title = "Välkommen"
И я получаю следующую ошибку:
invalid multibyte char (US-ASCII)
syntax error, unexpected $end, expecting keyword_end
@title = "Välkommen"
^
Что происходит?
EDIT: Если я добавлю:
# coding: utf-8
в верхней части моего контроллера он работает. Почему это и как я могу перенести эту "проблему"?
Ответы
Ответ 1
См. статью Джоэла Спольского "Абсолютный минимум Каждый разработчик программного обеспечения абсолютно уверен, должен знать о юникодном и символьном наборах (никаких оправданий!)".
Чтобы процитировать часть, которая кратко отвечает на эти вопросы
Самый важный факт о кодировании
Если вы полностью забудете все, что я только что объяснил, пожалуйста, помните один чрезвычайно важный факт. Нет смысла иметь строку не зная, какую кодировку он использует. Вы больше не можете голову в песок и притвориться, что "простой" текст - ASCII.
Вот почему вы должны сказать ruby, какая кодировка используется в вашем файле. Поскольку кодировка не отмечена в каких-либо метаданных, связанных с вашим файлом, некоторое программное обеспечение предполагало ASCII, пока оно не станет лучше. Ruby 1.9, вероятно, делает это до вашего комментария, когда он остановится, и перезапустите чтение файла, теперь декодирующего его как utf-8.
Очевидно, что если вы использовали какую-либо другую кодировку Unicode или некоторую локальную кодировку для своего рубинового файла, вам нужно будет изменить комментарий, чтобы указать правильную кодировку.
Ответ 2
"Магический комментарий" в Ruby 1.9 (на котором основан Rails 3) сообщает интерпретатору, какую кодировку ожидать. Это важно, потому что в Ruby 1.9 каждая строка имеет кодировку. До 1.9 каждая строка представляла собой просто последовательность байтов.
Очень хорошее описание проблемы - в блогах блога Джеймса Грея на Ruby и Unicode. Тот, который точно соответствует вашему вопросу, http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings (но смотрите на другие, потому что они очень хорошие).
Важная строка из статьи:
Первое является основным правилом исходных кодовых кодировок: исходные файлы получают кодировку US-ASCII, если не указано иное.
Ответ 3
Есть несколько мест, которые могут вызвать проблемы с кодировкой utf-8.
но некоторые трюки должны решить эту проблему:
- убедитесь, что каждый файл в вашем проекте основан на utf-8 (если вы
используют rad rails, это просто сделать: отметьте свой проект,
выберите свойства, в поле "text-file-encoding" выберите "other:
UTF-8" )
Обязательно добавьте свои странные символы "å, ä, ö" в свои файлы снова
или вы получите ошибку mysql, потому что она изменит ваши "å, ä, ö" на
"квадрат" (неизвестный символ)
-
в ваших базах данных .yml для каждой серверной среды (в этом
пример "разработка" с mysql)
development:
adapter: mysql
encoding: utf8
-
установить в фильтр приложения перед фильтром
(Application.rb):
class ApplicationController < ActionController::Base
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=utf-8"
end
end
-
обязательно установите кодировку в utf-8 в вашем mysql (я только использовал
mysql.. поэтому я не знаю о других базах данных) для каждой таблицы. если ты
используйте mySQL Administrator, вы можете сделать это так: отредактируйте таблицу, нажмите
вкладка "таблица параметров", изменить кодировку на "utf8" и сопоставить с
"Utf8_general_ci"
(Courtsey: kombatsanta)