【发布时间】:2021-08-11 04:13:59
【问题描述】:
我有以下binary file,我需要阅读它并找到字符'®️'。
如果我在 Windows 记事本中打开文件,我可以找到该字符。 如果我打开托管文件,我可以找到角色
但是在尝试使用 PHP 时,我找不到字符。
这是我迄今为止尝试过的:
$handle = fopen($filename, "r");
$fsize = filesize($filename);
$contents = "";
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
$r = "®️";
$strpos = strpos($contents, $r);
$mb_strpos = mb_strpos($contents, $r);
echo "<p>strpos function searching for '{$r}': " . ($strpos === false ? "Not found" : $strpos) . "</p>";
echo "<p>mb_strpos function searching for '{$r}': " . ($mb_strpos === false ? "Not found" : $mb_strpos) . "</p>";
$found = false;
for ($i = 0; $i < strlen($contents); $i++) {
$byte = $contents[$i];
if ($byte == $char) {
echo "<p>reading character per character of 'contents', {$r} position is {$i}</p>";
$found = true;
break;
}
}
我也尝试过使用函数 stream_get_contents
$offset = 0;
while ($byte = stream_get_contents($handle, 1, $offset)) {
if ($byte == "$r") {
echo "<p>{$r} position is {$i}</p>";
break;
}
$offset++;
}
我还尝试使用以下函数更改变量 $r 的编码
utf8_decode($r);
mb_convert_encoding($r, 'CP1252');
mb_convert_encoding($r, 'CP1252', 'UTF-8');
mb_convert_encoding($r, 'Windows-1252');
mb_convert_encoding($r, 'Windows-1252', 'UTF-8')
有人知道如何正确地找到文件中的字符吗?
【问题讨论】:
-
首先弄清楚(= 如:使用十六进制编辑器)文件的真正编码是否有意义? (顺便说一句,“ANSI”不是编码。强制:What every programmer absolutely, positively needs to know about encodings and character sets to work with text)
-
无法猜测或确定编码。您必须知道文件的编码才能使用它。
标签: php string file search ansi