Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取一个文件&x27;s字符编码,无需将整个文件读入内存_Php_File_Character Encoding - Fatal编程技术网

Php 获取一个文件&x27;s字符编码,无需将整个文件读入内存

Php 获取一个文件&x27;s字符编码,无需将整个文件读入内存,php,file,character-encoding,Php,File,Character Encoding,我知道如果你需要在PHP中获得文件的字符编码,你可以这样做 var_dump (mb_detect_encoding (file_get_contents ("somefile.txt"))); 但是,使用大文件执行此操作并不十分实际,因为它会占用大量内存 有没有一种方法可以可靠地确定字符编码,而不必将整个文件读入内存 否,如果不读取整个文件,就无法可靠地确定字符编码 原因:与ASCII不同的字符码(仍然是许多编码的基本部分)随机分布在文件中。它们可能都是你没读过的部分 当然,有些编码从一开始

我知道如果你需要在PHP中获得文件的字符编码,你可以这样做

var_dump (mb_detect_encoding (file_get_contents ("somefile.txt")));
但是,使用大文件执行此操作并不十分实际,因为它会占用大量内存


有没有一种方法可以可靠地确定字符编码,而不必将整个文件读入内存

否,如果不读取整个文件,就无法可靠地确定字符编码

原因:与ASCII不同的字符码(仍然是许多编码的基本部分)随机分布在文件中。它们可能都是你没读过的部分

当然,有些编码从一开始就很容易识别,但这不是问题所在

(让您有机会接受答案作为解决方案,尽管答案可能已在评论中给出,但您不应该这样做(SO策略)。

是的,您可以使用缓存, 您可以使用下面的功能,这可能会对您有所帮助

例:

输出: 字符串(6)“你好” 字符串(11)“你好,世界”

还有一些功能:

PHP_OUTPUT_HANDLER_CLEANABLE ob_clean()、ob_end_clean()和ob_get_clean()。 PHP_OUTPUT_HANDLER_FLUSHABLE ob_end_flush()、ob_flush()和ob_get_flush()。 PHP_OUTPUT_HANDLER_REMOVABLE ob_end_clean()、ob_end_flush()和ob_get_flush()


欲了解更多信息,请访问:

就其本质而言,字符编码检测充其量是不完善的。您可以简单地将代码更改为只读,例如,最多65536字节;但不能保证剩余字节中没有游戏规则改变者。在大多数情况下,64k应该足够了。如果变小,则会增加错误检测的风险。例如,某些文本文件的英文版EULA头超过8k,且仅ASCII头后的内容可以是任何语言,也可以是多种语言的混合体。我一直在读这篇文章,可以使用文件内容从文件中获取一部分,这样就不必加载整个文件。。Ofc正如tripleee所说,字符编码detetion并不能保证它是正确的编码。它没有以任何有意义的方式回答这个问题