如何在php中检测操作系统编码?

如何在php中检测操作系统编码?,php,Php,我想将文件系统编码的操作系统检测为默认,就像不同语言版本的Windows操作系统一样,它将使用不同的编码(iso-8859-1、ms950、big5、gb2312..等等) 那么,如何在PHP中检测不同的编码操作系统呢?有什么想法吗?谢谢。为什么不使用?Linux没有编码,文件名存储在二进制字符串中,可能包含任何内容。在特定编码中解释这一点取决于应用程序。通常这只是UTF-8。但是是的,这取决于文件名的“查看器” 在OS/X上访问文件系统将使用UTF-8规范化表单D 不幸的是,我无法回答wind

我想将文件系统编码的操作系统检测为默认,就像不同语言版本的Windows操作系统一样,它将使用不同的编码(iso-8859-1、ms950、big5、gb2312..等等)
那么,如何在PHP中检测不同的编码操作系统呢?有什么想法吗?谢谢。

为什么不使用?

Linux没有编码,文件名存储在二进制字符串中,可能包含任何内容。在特定编码中解释这一点取决于应用程序。通常这只是UTF-8。但是是的,这取决于文件名的“查看器”

在OS/X上访问文件系统将使用UTF-8规范化表单D

不幸的是,我无法回答windows上的内容。在内部,它存储为UTF-16的变体,但在我的机器上通过PHP访问。api是CP-1252,但这确实取决于语言。

试试看

    print_r( explode(";", setlocale(LC_ALL, 0)));
然后需要将代码页转换为编码文件系统没有一种编码,每个文件都可以使用不同的编码,所以您只需要找到一种正确的编码来处理文件名字符串

要检测文件名的编码,只需“尝试”将该文件名转换为所有已知的编码列表,并将原始文件名字符串与转换后的字符串进行比较,如果相等,则该编码就是您要查找的

将字符串转换为我使用的一种编码。因此,要完成这项工作,您可以看到下面的代码作为示例

function getActuallEncoding($text) {
    $encodingList = array('UTF-8', 'gb2312', 'ISO-8859-1', 'big5'); // Add more if you need.
    foreach($encodingList as $oneEncode) {
        $oneResult = iconv(mb_detect_encoding($text, mb_detect_order(), true), $oneEncode, $text);
        if(md5($oneResult) == md5($text)) return $oneEncode;
    }
    return "UNKNOWN"; // This return value may cause problem, just let you know.
}

希望这会有所帮助。

您是否检查了此处关于编码标识的其他问题?看看这个例子:或者这个:我不确定文件系统是否委托了一个编码。。。mb_list_编码将返回支持的编码列表。这不是我想要的答案,这与我的问题不同