特殊字符无法正确显示

特殊字符无法正确显示

当我将文件从服务器 A(Debian 7.4)复制到服务器 B(Debian 7.4)时遇到问题。文件中的波兰特殊字符在服务器 B 上无法正确显示(在 mcedit 中)。

我在服务器 A 上创建了包含波兰特殊字符的文件。它在服务器 A 上正确显示。当我locale在服务器 A 上运行时,我发现除和之外LANG=pl_PL.UTF-8的其他变量都设置为。然后我打包文件,并在服务器 BI 上使用 wget 命令下载打包的文件。在服务器 BI 上解压文件,当我查看文件内容(mcedit)时,发现波兰字母显示不正确。有“菱形”而不是特殊字符。当我在服务器 B 上运行时 。除和之外的其他变量都设置为。LANGUAGELC=ALLpl_PL.UTF-8localeLANG=en_US.UTF-8LANGUAGELC=ALLen_US.UTF-8

然后我运行数据库迁移(php 脚本),损坏的数据被插入到数据库中。当我在迁移中添加行时,波兰特殊字符被替换为字符串,例如Å›(波兰字母ś被替换为Å›)。

我在 mcedit 中检查发现,服务器 A 和服务器 B 上的文件在两台服务器上具有相同的值。波兰字母 'ś' 在两台机器上都是 C5 9B(十六进制)。

最糟糕的是,每次出现特殊字符时,我都必须手动检查并纠正数据库中的错误。

可能当我通过 php 迁移脚本编辑数据库中的列值时,它也会损坏数据库中的数据。一旦我从表中读取数据,然后进行操作并保存,我的数据也会被损坏。

如果我将服务器 B 上的语言环境更改为,那么pl_PL.UTF-8其他语言(如德语、捷克语等)中的特殊字符可以正常工作吗?如果是字体问题,那么为什么数据库迁移也会损坏?我使用的是 UTF-8,那么每种语言的每个特殊字符都应该正确显示?如何正确显示每种语言的特殊字符以及如何正确执行 php 迁移?

更新 1:
服务器 Alocale -a输出:

C
C.UTF-8
pl_PL.utf8
POSIX

服务器 Blocale -a输出:

C
C.UTF-8
en_US.utf8
POSIX

在两台服务器上,locale -m 输出很多字符表(两台机器上似乎都一样)

答案1

检查输出locale -alocale -m确保服务器 B 安装了正确的语言环境和字符集,以正确解释 pl_PL.UTF-8

相关内容