Ошибка «несовместимые кодировки символов: ASCII-8BIT и UTF-8» из-за 8-битной кодировки файлов cookie (Rails 3 и Ruby 1.9) - PullRequest
8 голосов
/ 23 марта 2011

Я переместил веб-приложение, которое использовало 1.8.7 на 1.9.2, и теперь я получаю

incompatible character encodings: ASCII-8BIT and UTF-8

У меня есть кодировка базы данных в UTF-8, и у меня также есть 'config.encoding ="utf-8" '.

Я видел некоторые идеи в качестве возможных обходных путей и добавил

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

Но это тоже не сработало.

Один конкретный кусоккод, где я получаю эту ошибку:

%ul.address
- @user.address.split(',').each do |line|
  %li= line.titleize

Я использую HAML, я проверил line.titleize, и кодировка UTF-8.Кажется, что шаблон визуализируется с помощью ASCII-8BIT, и каждый раз, когда я пытаюсь отобразить такие символы, как 'ñ'

, я работаю с Rails 3.0.5.

Iпрочитал пост Джеймса Эдварда Грея, но я все еще могу понять, что происходит; (.

Я бы очень признателен за любую помощь: D.

Я также пытался:

"string".force_encoding("UTF-8")

И

# encoding: utf-8

Без удачи.

Исправлено


См. Комментарии.

Ответы [ 2 ]

5 голосов
/ 12 июля 2011

Я только что натолкнулся на нечто подобное ... и обнаружил, что исправление скрыто в комментариях к этому вопросу, но думаю, что стоит особо подчеркнуть:

куки - это ASCII-8BIT, но шаблоны rails 3 - UTF-8 по умолчанию.Это означает, что использование необработанного значения cookie в представлении может вызвать Encoding :: CompatibilityError (если у пользователя есть несовместимое значение cookie)

Исправление (как отмечает Adolfo Builes) заключается в приведении значений cookie кUTF-8, как в:

cookies["location"].force_encoding('UTF-8')
0 голосов
/ 02 мая 2012

для хамла поставить

-# coding: UTF-8

в левом верхнем углу страницы.

...