将编码从 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?
你有两个主要的内置函数来完成这项工作,只需选择一个:
-
$file = mb_convert_encoding($file, 'UTF-8', 'Windows-1251');
-
$file = iconv('Windows-1251', 'UTF-8', $file);
要确定您的自制软件替代方案为何不起作用,我们需要花一些时间检查完整的代码库,但我可以想到一些潜在的问题:
您正在使用混合编码,但您没有使用十六进制表示法或任何类型的字符串实体。也不清楚脚本文件本身保存为什么编码。
PCRE 中没有 \Ž
escape sequence(不知道是什么意思)。
也许您不止一次替换了某些字符串。
最后但同样重要的是,您是否编译了一个完整且正确的字符映射数据库,其中至少包含两种编码之间不同的 128 个代码点?
我正在尝试解码在 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);
要确定您的自制软件替代方案为何不起作用,我们需要花一些时间检查完整的代码库,但我可以想到一些潜在的问题:
您正在使用混合编码,但您没有使用十六进制表示法或任何类型的字符串实体。也不清楚脚本文件本身保存为什么编码。
PCRE 中没有
\Ž
escape sequence(不知道是什么意思)。也许您不止一次替换了某些字符串。
最后但同样重要的是,您是否编译了一个完整且正确的字符映射数据库,其中至少包含两种编码之间不同的 128 个代码点?