将编码从 windows-1251 更改为 utf-8

Change encoding from windows-1251 to utf-8

我正在尝试解码在 windows-1251 中创建的文件并将它们编码为 UTF-8。除了 ÅÄÖåäö 等一些特殊字符外,一切正常。例如 Ä 变为 Ž 然后我使用 preg_replace 改变哪个工作正常,如下所示:

$file = preg_replace("/\Ž/", 'Ä', $file);

我在使用 Å 时遇到问题 <U+008F>,我看到它转换为单班三班,我似乎无法在上面使用 preg_replace?

你有两个主要的内置函数来完成这项工作,只需选择一个:

  • Multibyte String:

    $file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
    
  • iconv:

    $file = iconv('Windows-1251', 'UTF-8', $file);
    

要确定您的自制软件替代方案为何不起作用,我们需要花一些时间检查完整的代码库,但我可以想到一些潜在的问题:

  • 您正在使用混合编码,但您没有使用十六进制表示法或任何类型的字符串实体。也不清楚脚本文件本身保存为什么编码。

  • PCRE 中没有 escape sequence(不知道是什么意思)。

  • 也许您不止一次替换了某些字符串。

  • 最后但同样重要的是,您是否编译了一个完整且正确的字符映射数据库,其中至少包含两种编码之间不同的 128 个代码点?