我正在尝试解码在Windows-1251中创建的文件,并将它们编码为UTF-8。除某些特殊字符(如ÅÄÖåäöö)外,其他所有东西都起作用。例如Ä变成Ž,然后使用preg_replace进行更改,如下所示:
$file = preg_replace("/\Ž/", 'Ä', $file);
我遇到Å时遇到麻烦,它显示为<U+008F>
,我看到它转换为单班三班,似乎无法在其上使用preg_replace吗?
您有两个主要的内置函数来完成工作,只需选择一个:
$file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
$file = iconv('Windows-1251', 'UTF-8', $file);
为了确定为什么您的自制方法不起作用,我们需要花一些时间来检查完整的代码库,但我可以想到一些潜在的问题:
您正在使用混合编码,但是没有使用十六进制表示法或任何类型的字符串实体。还不清楚脚本文件本身的编码是什么。
也许您要多次替换某些字符串。
最后但并非最不重要的一点,您是否编译了完整且正确的字符映射数据库,其中至少包含两种编码之间不同的128个代码点?