Изменить. На снимке экрана видно, что приведенный ниже диагноз, вероятно, верен.
Что делать. Попробуйте использовать iconv()
в своем веб-приложении PHP. Вам нужно будет угадать или узнать, какую сортировку/кодовую страницу использует ваше приложение для Windows.
Тогда что-то вроде этого может сработать:
$string_decoded = iconv("windows-1256", "utf-8", $string);
Возможно, вам придется поэкспериментировать, чтобы заставить это работать. Кроме того, я думаю, вам нужно заставить соединение с базой данных использовать latin1 вместо UTF-8!
Если вы спросите меня, это не хорошая основа для вашего веб-приложения. Вам придется все время преобразовывать данные в неработающий формат. Возможно, вам придется нарушить совместимость с вашим приложением или написать инструмент импорта.
Набор символов latin1 не распространяется на персидские символы. Доказательство на collation-charts.org
Единственное объяснение, почему ваша программа Delphi может хранить арабские символы в базе данных latin1, заключается в том, что это может быть неправильное использование базы данных latin1 для хранения данных, которые не охватываются latin1, например. Windows-1256 Arabic. Таким образом, программа будет хранить необработанные байты каждый арабский символ, в то время как на самом деле эти байты заняты другими, латинскими символами в наборе символов latin1. Но пока только программа Delphi сохраняла и извлекала данные, никто этого не замечал.
Если я прав в этом - это единственный способ увидеть, как может происходить то, что вы описываете - это работает до тех пор, пока задействованы только приложения, которые делают это таким же образом, способ, который неправильно действительно.
Вы должны быть в состоянии подтвердить, так ли это, просмотрев данные из нейтрального инструмента базы данных, такого как phpMyAdmin или HeidiSQL. Если вы видите там мусор вместо арабских/персидских символов, возможно, я прав.
Что касается что делать, чтобы ваше веб-приложение PHP работало с той же базой данных, что и ваше приложение Delphi, - я не совсем уверен, что делать, если честно. Насколько мне известно, невозможно заставить mySQL использовать одну кодировку вместо другой. Вам придется вручную перекодировать данные, прежде чем извлекать их в свое веб-приложение. Скорее всего, это болезненный процесс.
Но сначала постарайтесь выяснить, что именно происходит.
person
Pekka
schedule
28.10.2012
???? ?? ????
. - person Root   schedule 28.10.2012