Проблема кодирования mysql со специальным символом - PullRequest
0 голосов
/ 13 июля 2009

Я заметил, что мое приложение Rails возвращается вместо двойных кавычек и некоторых тире, оно возвращает знак вопроса -

Есть ли способ обновить таблицу и заменить их оригинальными символами?

Спасибо!

Amie

Ответы [ 3 ]

1 голос
/ 14 июля 2009

Это будут «умные кавычки» и «или» (& ldquo; & ldquo; & lsquo; & quot; & mdash; & ndash; & ndash;). Приложения Microsoft, как правило, используют их вместо своих совершенно хороших эквивалентов ASCII, кавычек, апострофов и дефисов. Они также сохраняют текст как windows-1252, расширение Microsoft для кодировки символов ISO-8859-1, которое включает сопоставления для этих причудливых символов вместо (предположительно бесполезных) управляющих символов в диапазоне 128..159.

Таким образом, непосредственная проблема заключается в том, что вы декодируете текст как ISO-8859-1 или UTF-8 или даже ASCII (или позволяете системе использовать по умолчанию одно из этих кодировок), когда вам следует использовать windows-1252. Для получения дополнительной информации о проблеме real , Google "demoronizer" или "ASCII Dammit".

1 голос
/ 19 июля 2009

Эти знаки вопроса указывают на недопустимый байт для кодирования среды, в которой отображается результат.

В наши дни большинство сред будут utf-8.

Если вы запускаете консольное приложение mysql, при первом подключении выполните следующую команду, чтобы сервер MySQL вернул все результаты для текущего подключения в utf-8:

  SET NAMES utf8;

В rails вы можете запустить эту команду, когда ActiveRecord открывает соединение с БД, добавив «encoding: utf8» в ваш файл database.yml. Вам также следует убедиться, что ваш веб-сервер (apahce / nginx / etc) отправляет HTTP-заголовок utf-8 и что ваши HTML-файлы имеют метатег Content-Type.

Возможно, у вас есть поврежденные байты, хранящиеся в вашей базе данных, и это не поможет. Если это так, вы попадаете в мир веселья, пытаясь привести его в порядок:)

0 голосов
/ 13 июля 2009
update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');

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

Используйте это заявление на свой страх и риск.

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