Кодировка UTF-8 в модели рельсов - PullRequest
2 голосов
/ 15 декабря 2010

У меня есть база данных MySQL, настроенная на использование UTF-8.

В моем файле database.yml для базы данных задано значение utf8.

Я делаю некоторые операции по очистке и вставке HTML в базу данных MySQL.

Если я получаю HTML из базы данных на PHP, он правильно кодирует все символы и производит точный ввод:

// code
$result = mysql_query("SELECT raw_html FROM pages WHERE id = 1");
echo mysql_result($result,0);

// output
Hawaiʻi.

И вывод выглядит великолепно. Однако в рельсах я получаю странные символы:

// code in the controller
@page = Page.find(params[:id])

// code in the view
<%= @page.raw_html %>

// output
Hawaiʻi

Где-то еще мне нужно форсировать UTF-8? Я пытался использовать библиотеку iconv безрезультатно (если я не использую ее неправильно).

UPDATE: Я воспроизвел ту же проблему при использовании консоли. Итак:

Page.find(2).raw_html[91..94]

"Ê»"

Проблема также возникает под консолью (скрипт / консоль), если это проливает свет на проблему.

ОБНОВЛЕНИЕ 2: Хорошо, при дальнейшем расследовании я понял, что делал что-то глупое. Но это не исправило это.

Хотя для таблицы было установлено UTF8, столбец не был. Я изменил столбец на utf8_general_ci. Однако (и это заставляет меня думать, что я испорчил что-то простое), это на самом деле дает правильный результат:

@raw_html = Iconv.conv('LATIN1','UTF-8',@page.raw_html[0..10000])

Прекрасно выходит. К сожалению, если я пропущу всю страницу, я получу:

Iconv::IllegalSequence in PagesController#show 
"€²18″N<"...

Так что там есть еще кое-что интересное. Может ли быть так, что у меня до сих пор кодируется «латинский», хотя я явно установил для таблицы и столбца UTF-8 (и заново заполнил HTML)? В настоящее время я использую камень mysql2, согласно предложению Джеффри.

ОБНОВЛЕНИЕ 3: Чтобы уточнить, я также получаю ошибки консоли. Это команда:

Page.find(2).raw_html[91..94]

И это ответ:

"Ê»"

Ответы [ 3 ]

5 голосов
/ 16 декабря 2010

В вашем database.yml добавьте encoding: utf8 к каждой настройке вашей среды.

2 голосов
/ 16 декабря 2010

Вы можете переключиться на mysql2:)

Установите его как в файле gem, так и в файле database.yml

адаптер: mysql2

gem "mysql2"

Это должно избавить вас от многих проблем:)

0 голосов
/ 16 декабря 2010

Убедитесь, что вы установили кодировку символов для html-страницы в вашем макете

Если вы используете HTML5, попробуйте добавить это в качестве первой строки на вашей странице

<meta charset="UTF-8">

ДляHTML 4, попробуйте добавить это в раздел заголовка страницы

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

Для страниц XHTML попробуйте

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

, если вы работаете с MIME-типом text / html, и это

<?xml version="1.0" encoding="UTF-8"?>

в качестве самой первой строки обслуживаемого файла, если его XHTML служил XML

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