2015-01-11 4 views
0

У меня есть наследие база данных, которая утверждает, что сверка установлена ​​в Windows-1252 и хранящая содержимое в текстовом поле какConfused о преобразовании между Windows-1252 и UTF-8 кодировкой

I’d

Когда это отображается в устаревшем веб-приложении, которое отображается в браузере как I’d. Браузер сообщает о кодировке страницы UTF-8. Я не могу понять, как это преобразование было сделано (почти наверняка это не с помощью поиска и замены на лету). Это проблема для меня, потому что я беру текстовое поле (и многие другие) из старой базы данных и в новую базу данных UTF-8. Новый веб-приложение отображает текст из новой базы данных, как

I’d

, и я хотел бы, чтобы показать, как I’d. Я не могу понять, как это могло бы достичь унаследованное приложение (некоторая игра в Ruby не показала мне способ повлиять на преобразование строки I’d в I’d).

Я где-то привязал себя в узле.

+1

Ваша база данных содержит мусор. Вставляется программой, которая игнорирует кодировку и использует utf8. И, как повезло, он прочитал программу, которая также игнорировала ее. Обычно это не удача. Он работает на 99% вправо. –

ответ

1

Возможно, это означает, что предыдущий разработчик ввернул в себя вставку данных (или вы где-то прикручиваете). Сценарий выглядит следующим образом:

  • соединение базы данных устанавливается в latin1
  • приложение фактически отправляет UTF-8 в базе данных
  • базы данных интерпретирует все данные как latin1, хранит его как таковой (толкует ", как â € ™)
  • приложение запрашивает данные снова
  • возвращается к базе данных, € ™, закодированных в latin1
  • pp интерпретирует данные как UTF-8, в результате чего «

Вам, по сути, необходимо сделать то же неверное истолкование, чтобы получить хорошие данные. Прямо сейчас вы можете запрашивать базу данных через соединение utf8, поэтому база данных возвращается в кодировку UTF-8. Вам нужно выполнить запрос через соединение latin1 и вместо этого интерпретировать данные как UTF-8.

См. Handling Unicode Front To Back In A Web App для более подробного объяснения всего этого.

+0

Да, это имеет смысл благодаря @deceze. Тогда я хотел бы сделать одно конвертирование. Не хотите прикасаться к старой базе данных. – Ben