Как намеренно вставить строки с неправильной кодировкой в ​​Mysql?

Это, наверное, один из самых странных вопросов, которые мне приходилось задавать в Stackoverflow :)

У меня есть устаревшее непроверенное PHP-приложение, которое я вообще не могу трогать. Это приложение использует Mysql и одну базу данных для каждой учетной записи. Итак, у нас есть тысячи баз данных.

Из-за ошибки, которая была там задолго до того, как я начал над ней работать, это приложение соединяется с неправильной кодировкой в ​​Mysql. Итак, в базе данных, где мы должны были иметь "é", мы фактически получаем "é". Хотя в приложении (из-за неправильной кодировки подключения) получаем é.

У меня есть приложение Rails, которое управляет созданием учетных записей/баз данных. Проблема в том, что приложение Rails использует правильную кодировку, и когда оно создает базу данных, оно вставляет некоторые данные, которые приложение PHP не может правильно прочитать.

Мой вопрос: учитывая, что у меня есть строка «é» в Ruby, как мне намеренно изменить ее на «Ã©»? Любой string.encode, который я могу использовать?

Примечание 1: я не могу сбросить все базы данных и исправить это (что было бы идеальным решением).

Примечание 2: я не могу переключить кодировку соединения Rails, так как она использует другую базу данных с правильной кодировкой.


person Fernando    schedule 07.01.2013    source источник


Ответы (1)


Вы можете попробовать использовать кодировку по умолчанию как

config.action_controller.default_charset = 'ISO-8859-1'

в config/application.rb

Исходная кодировка PHP выглядит как ISO 8859-1 или Windows-1252.

Я попробовал это на irb и обнаружил, что это работает

1.9.3p194 :002 > puts "é".force_encoding("ISO-8859-1").encode("UTF-8")
é
 => nil 
person Nishant    schedule 07.01.2013
comment
Благодарю вас! force_encoding — это именно то, что мне нужно. - person Fernando; 07.01.2013
comment
Windows-1252 — гораздо более безопасная ставка, поскольку MySQL Latin-1/ISO-8859-1 ошибочно помечен как Windows-1252, а Windows-1252 фактически представляет собой надмножество ISO-8859-1, заменяющее неиспользуемые управляющие символы в ISO-8859-1. 1 с отображаемыми и используемыми символами, такими как или - person Esailija; 07.01.2013