Как бороться с устаревшим приложением, хранящим арабские символы в базе данных latin1

Сейчас я работаю над веб-приложением PHP для работы с базой данных MySQL Server.
база данных имеет набор символов Latin1, и все тексты на персидском языке отображаются неправильно.
база данных используется с программным обеспечением Windows Показать и сохранить Персидские тексты хороши.
Я не хочу менять кодировку, потому что программы Windows работают с этой кодировкой.

Вопрос:
как преобразовать latin1 в utf8 для отображения и utf8 в latin1 для сохранения из моего веб-приложения PHP или с использованием персидского/арабского языка на latin1 база данных кодировки без проблем?

примечание:
один из моих текстов имеет номер احمد رحمانی, когда я сохраняю его из моего программного обеспечения для Windows, сохраняю как ÇÍãÏ ÑÍãÇäí и по-прежнему отображаю с احمد رحمانی в моем старом программном обеспечении для Windows

изображение : изображение базы данных, наборов символов, сортировки и программного обеспечения на базе Windows ( полный размер) изображение базы данных, наборов символов, сопоставления и программного обеспечения на базе Windows


person Root    schedule 28.10.2012    source источник
comment
Вы не можете отображать арабские символы в латинице 1: msdn. microsoft.com/en-us/library/ms537495(v=vs.85).aspx   -  person JvdBerg    schedule 28.10.2012
comment
@Pekka не повторяется, я сначала вижу других   -  person Root    schedule 28.10.2012
comment
@JvdBerg У меня есть программное обеспечение Delphi на базе Windows, которое без проблем работает с этой базой данных с кодировкой latin1, хорошо показывает и сохраняет персидские тексты.   -  person Root    schedule 28.10.2012
comment
@коренная точка взята за дубликат, я поторопился. Если вы заглянете в базу данных с помощью таких инструментов, как phpMyAdmin или HeidiSQL, все ли в порядке с данными? (Будьте осторожны, чтобы ничего не изменить, если это выглядит не так, и всегда имейте резервные копии)   -  person Pekka    schedule 28.10.2012
comment
@Pekka Спасибо, я добавляю примечание к первому сообщению, я не хочу менять кодировку db на utf8, потому что программное обеспечение на базе Windows работает с latin1 и без проблем с персидским/арабским текстом, если я вставлю текст как utf8 в базу данных этот текст, показанный в моем старом программном обеспечении на базе Windows, с вопросительными символами, такими как ???? ?? ????.   -  person Root    schedule 28.10.2012
comment
@root Я добавил ответ с теорией о том, что может происходить в вашем приложении Delphi.   -  person Pekka    schedule 28.10.2012


Ответы (1)


Изменить. На снимке экрана видно, что приведенный ниже диагноз, вероятно, верен.

Что делать. Попробуйте использовать 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
comment
спасибо, теперь я знаю, что это программное обеспечение является старой программой и работает с этой кодировкой, и я не знаю, кто запрограммировал это программное обеспечение. Я пытаюсь найти способ хранить и отображать такие данные. изображение из базы данных, кодировки, поля и моей программы на базе Windows добавлено в первый пост, пожалуйста, проверьте это;) - person Root; 28.10.2012
comment
спасибо, но все еще есть проблема, теперь текст отображается как أ‡أچأ£أڈ أ‘أچأ£أ‡أ¤أ­, должен отображаться как احمد رحمانی - person Root; 28.10.2012
comment
@root, тогда вам придется поэкспериментировать с кодовыми страницами (вместо Windows-1256, это было просто предположение с моей стороны) и с сопоставлением соединения mySQL. Извините, у меня много работы, и я не могу вдаваться в подробности.... - person Pekka; 28.10.2012