使用 Windows-1252 mb_detect_encoding的意外结果



我读过维基百科关于Windows-1252字符编码的文章。 对于字节值<128 的字符,它应与 ASCII/UTF-8 相同。

这是有道理的:

php -r "var_export(mb_detect_encoding("x92", 'windows-1252', true));" 'Windows-1252'

正确检测到左卷曲撇号。

php -r "var_export(mb_detect_encoding("a", 'windows-1252', true));" false

哼? 字母"a"不是Windows-1252吗?

我正在运行它的终端设置为 UTF-8。 因此,这应该是与字母"a"的 ASCII 相同的字节序列。 为了最小化变量,如果我指定正确的 Windows-1252 字节序列:

php -r "var_export(mb_detect_encoding("x61", 'windows-1252', true));" false

在这些情况下,更改"strict"参数(其中包含非常无用的文档)没有任何作用。

windows-1252 不支持编码检测。 根据mb_detect_order文档:

MB字符串当前实现以下编码检测过滤 器。如果以下内容的字节序列无效编码,编码检测将失败。

UTF-8, UTF-7, ASCII,EUC-JP,SJIS, EUCJP-WIN, SJIS-WIN, JIS, ISO-2022-JP

对于 ISO-8859-,mbstring 始终检测为 ISO-8859-

对于 UTF-16、UTF-32、UCS2 和UCS4,编码检测将始终失败。

相关内容

  • 没有找到相关文章

最新更新