0

私は現在、MySQL Server データベースを操作する Web ベースの PHP アプリに取り組んでいます。
データベースは Latin1 文字セットを使用しており、すべてのペルシャ語のテキストが正しく表示されません。
データベースは、windows ソフトウェアで使用され、ペルシア語のテキストを表示および保存します。
Windowsソフトウェアはその文字セットで動作するため、文字セットを変更したくありません。

質問:
latin1 を utf8 に変換して表示し、utf8 を latin1 に変換して Web ベースの PHP アプリから保存したり、latin1 charset データベースで問題なくペルシャ語/アラビア語を使用したりするにはどうすればよいですか?

注:
私のテキストの1つは、Windowsベースのソフトウェアから保存して、古いWindowsاحمد رحمانیベースのソフトウェアで保存しÇÍãÏ ÑÍãÇäíて表示する場合ですاحمد رحمانی

image : データベース、文字セット、照合、および Windows ベースのソフトウェアのイメージ (フルサイズ) データベース、文字セット、照合、および Windows ベースのソフトウェアのイメージ

4

1 に答える 1

2

編集:あなたのスクリーンショットは、以下の診断がおそらく正しいことを示しています。

何をすべきか:iconv() PHP Web アプリケーションで使用してみてください。Windows アプリが使用する照合順序/コードページを推測または調べる必要があります。

次に、次のようなものが機能する可能性があります。

$string_decoded =  iconv("windows-1256", "utf-8", $string); 

これを機能させるには、実験が必要な場合があります。また、データベース接続に UTF-8 の代わりに latin1 を使用するように強制する必要があると思います!

あなたが私に尋ねると、これはあなたのウェブアプリの良い基盤ではありません. 常にデータを破損した形式に変換する必要があります。アプリケーションとの互換性を壊すか、インポート ツールを作成する必要がある場合があります。

latin1 文字セットは、ペルシャ文字をカバーしていません。collat​​ion-charts.org での証明

あなたの Delphi プログラムがアラビア文字を latin1 データベースに格納できる理由は、 latin1 データベースを悪用して、latin1 でカバーされていないデータ ( Windows-1256 アラビア語など) を格納している可能性があるからです。したがって、プログラムは各アラビア文字の未加工のバイトを格納しますが、実際には、これらのバイトはlatin1 文字セットの他のラテン文字によって占められています。しかし、Delphi プログラムだけがデータの格納とフェッチを行っている限り、誰も気づきませんでした。

私が正しければ、あなたが説明したことがどのように起こっているかを知ることができる唯一の方法です.これは、同じ方法でこれを行うアプリケーションのみが関与している限り、実際には間違った方法です.

phpMyAdmin や HeidiSQL などの「中立的な」データベース ツールからのデータを調べることで、これが当てはまるかどうかを確認できるはずです。アラビア語/ペルシャ語の文字の代わりにゴミが表示されている場合、私は正しいかもしれません.

PHP Web アプリを Delphi アプリと同じデータベースで動作させるために何をすべきかについては、正直なところ、何をすべきかよくわかりません。私の知る限り、mySQL に一方のエンコーディングを強制的に使用させる方法はありません。データを Web アプリにフェッチする前に、データを手動で「再エンコード」する必要があります。これはおそらく痛みを伴うプロセスです。

しかし、最初に、正確に何が起こっているのかを調べてみてください。

于 2012-10-28T10:36:35.150 に答える