我现在使用基于Web的PHP应用程序来处理MySQL服务器数据库 数据库使用Latin1字符集,并且所有波斯文本都没有正确显示 数据库与Windows软件显示和保存波斯文本一起使用 我不想更改charset因为windows软件可以使用该charset。
问题:
如何将latin1转换为utf8以显示和将utf8转换为latin1以便从我的基于Web的PHP应用程序进行保存,或者在latin1 charset数据库中使用波斯语/阿拉伯语语语而没有问题?
注:
从我的基于Windows的软件保存时,我的其中一个文本为احمد رحمانی
,另存为ÇÍãÏ ÑÍãÇäí
,并且仍在我的旧基于Windows的软件中显示احمد رحمانی
图片:image of database , charsets,collation and windows-based software (full Size)
答案 0 :(得分:2)
修改:您的屏幕截图显示以下诊断可能是正确的。
该怎么做:尝试在PHP Web应用程序中使用
iconv()
。您必须猜测或找出Windows应用程序使用的排序规则/代码页。然后这样的事情可能有效:
$string_decoded = iconv("windows-1256", "utf-8", $string);
您可能需要进行试验以使其正常工作。另外,我想你需要强制你的数据库连接使用latin1而不是UTF-8!
如果您问我,这不是您的网络应用的良好基础。您必须始终将数据转换为损坏的格式。您可能必须破坏与应用程序的兼容性,或编写导入工具。
latin1字符集不包含波斯语字符。 Proof at collation-charts.org
我为什么你的Delphi程序能够在latin1数据库中存储阿拉伯字符的唯一解释是,它可能误用 latin1数据库来存储latin1未涵盖的数据,例如: Windows-1256 Arabic.因此程序将存储每个阿拉伯字符的原始字节,而实际上这些字节被latin1字符集中的其他拉丁字符占用。但只要只有Delphi程序存储和获取数据,没有人注意到。
如果我在这方面是正确的 - 这是我能够看到你所描述的内容的唯一方式 - 只要只涉及应用程序以相同的方式执行此操作 真的错了。
您应该能够通过查看来自“中立”数据库工具(如phpMyAdmin或HeidiSQL)的数据来确认是否是这种情况。如果你看到垃圾而不是阿拉伯语/波斯语字符,我可能是对的。
关于要做什么使您的PHP Web应用程序与您的Delphi应用程序使用相同的数据库 - 我不确定该怎么做才能说实话。据我所知,没有办法强制mySQL使用一种编码而不是另一种编码。在将数据提取到Web应用程序之前,您必须手动“重新编码”数据。这可能是一个痛苦的过程。
但首先,试着找出到底发生了什么。