0

我现在在一个基于 Web 的 PHP 应用程序上工作,以使用 MySQL 服务器数据库。
数据库是 Latin1 字符集,所有波斯文本都不能正确显示。
数据库是用一个windows软件显示和保存波斯文的好。
我不想更改字符集,因为 Windows 软件可以使用该字符集。

问题:
如何将 latin1 转换为 utf8 以显示并将 utf8 转换为 latin1 以从我的基于 Web 的 PHP 应用程序保存,或在 latin1 字符集数据库上使用波斯语/阿拉伯语没有问题?

注意:
我的文本之一是احمد رحمانی从我的基于 Windows 的软件保存时另存为ÇÍãÏ ÑÍãÇäí并仍然显示احمد رحمانی在我的旧的基于 Windows 的软件中

图像数据库、字符集、整理和基于 Windows 的软件的图像(全尺寸) 数据库、字符集、整理和基于windows软件的图像

4

1 回答 1

2

编辑:您的屏幕截图显示下面的诊断可能是正确的。

怎么做:尝试iconv()在您的 PHP Web 应用程序中使用。您将不得不猜测或找出您的 Windows 应用程序使用的排序规则/代码页。

然后这样的事情可能会起作用:

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

您可能需要进行试验才能使其正常工作。另外,我认为您需要强制您的数据库连接使用 latin1 而不是 UTF-8!

如果您问我,这不是您的网络应用程序的良好基础。您必须一直将数据转换为损坏的格式。您可能不得不破坏与您的应用程序的兼容性,或者编写一个导入工具。

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 回答