我有一个文本文件,当我在Sublime Text中打开它时显示如下:
但是当我fread
文件并回显php中的每一行时,我会得到像这样的乱码:
我阅读Joel's post on encoding并了解编码的基础知识。此外,当我执行mb_detect_encoding
时,它会将字符串检测为UTF-8。现在,我不明白我要对这个字符串编码的信息做什么,以便将其显示或转换为可读字符,如第一张图片中所示。
为什么当它已经是UTF-8时显示乱码? php是否使用不同的编码类型来读取文件? php字符串必须是UTF-8还是ASCII,或者只要我指定它是什么就没关系?
如果有人能帮我理解这个想法,我真的很感激!感谢。
编辑:
Pedro Lobito和彼得的建议奏效了。
$file = file_get_contents($bl_file);
$content = unpack("H*", $file);
但如果有人能解释我为什么要这样做,那还能帮助我理解它!
答案 0 :(得分:1)
但如果有人能解释我为什么要这样做,那还能帮助我理解它!
因为它是二进制文件。 Sublime显示原始二进制值的十六进制人类可读表示。
执行file_get_contents时,将文件读入字符串'0101010',原始位和字节。
当您解压缩(H * / * H代表HEX * /,$ file)时,您告诉PHP,您希望将二进制数据视为字节流的人类可读十六进制编码表示。 (当你看到字母A-F时,你可以告诉它是一个十六进制)
HEX编码比二进制编码更具可读性,这就是Sublime使用它的原因。此外,我曾经看过一个可以用原始二进制编码的人。我很害怕。
当你回应它们时,你只是将原始二进制值流式传输到控制台,它们没有特殊含义,因此控制台(或浏览器)将它们显示为控制字符和其他垃圾,这对于人眼来说已经具有意义。
因此,如果您使用其他文本编辑器打开此文件,它将:
a)显示垃圾(mcedit)
b)显示垃圾并告诉你它是一个二进制文件(vim,gedit)
Sublime过分友好地欺骗你认为它是一个文本文件。
如果您将二进制文件回显到命令提示符/ shell,它可能会终止您的数据。永远不要这样做。因为shell可以将原始二进制数据解释为命令并运行它。
如果你在内部回复一些二进制文件:
rm -rf ~/[bytecode_For_NewLine_Here]
,
你可以在linux中删除你的主文件夹内容