PHP文件打开编码问题?

Ste*_*ven 0 php encoding

当我尝试在PHP中打开由游戏创建的.log文件时,我得到了一堆.

ÿþ*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*?*? ?
K?2? ?E?n?g?i?n?e? ?s?t?a?r?t? ?u?p?.?.?.? ?
[?2?0?0?9?/?2?2?/?0?9?]? ?
[?1?6?:?0?7?:?3?3?]? ?
[?0?.?1?.?4?6?.?0?]? ?
[?0?]? ?
Run Code Online (Sandbox Code Playgroud)

我不知道为什么?我的代码是

$file = trim($_GET['id']);
$handle = @fopen($file, "a+");

    if ($handle) {
        print "<table>";
        while (!feof($handle)) {
            $buffer = stream_get_line($handle, 10000, "\n");
            echo "<tr><td width=10>" . __LINE__ . "</td><td>" . $buffer . "</td></tr>";
        }
        print "</table>";

fclose($handle);
Run Code Online (Sandbox Code Playgroud)

我正在使用,stream_get_line因为它对大文件显然更好?

Mic*_*sen 7

PHP对编码并不是很了解.特别是,它对文件的编码一无所知.

数据看起来像UTF-16LE.因此,您需要将其转换为可以处理的内容 - 或者,因为您只是打印,所以您可以将整个脚本转换为输出其HTML为UTF-16LE.

我可能更喜欢转换为UTF-8并将其用作页面编码,因此您确定没有丢失任何字符.看看iconv,假设它可用(我相信Windows上需要PHP扩展).

请注意,无论您执行什么操作,都应该删除第一行的前两个字符,假设编码始终相同.在您显示的数据中,这些字符是字节顺序标记,它告诉我们文件的编码(UTF-16LE,就像我之前提到的那样).

但是,看看它看起来像是纯文本,而你正在做的就是打印数据,考虑只在普通的旧文本编辑器(支持Unicode)中打开它.不知道你的操作系统,我犹豫是否建议一个特定的操作系统,但如果你在Windows上,文件相对较小,记事本可以做到这一点.

作为旁注,__LINE__不会显示您正在读取的文件的行号,它将打印当前正在执行的脚本行的行号.