Windows-1252 的 mb_detect_encoding 出现意外结果

Hut*_*ut8 3 php utf-8 character-encoding mb-convert-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”参数(其文档非常无用)没有任何作用。

bor*_*ble 6

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

mbstring 当前实现以下编码检测过滤器。如果以下编码存在无效的字节序列,则编码检测将失败。

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,编码检测始终会失败。

  • 呵呵,就像一个*白痴*一样,我原以为这些信息会出现在“mb_detect_encoding”文档中! (4认同)