我需要确定.csv文件内容的字符编码。
我见过的每个代码片段都使用file_get_contents()
,但是我不能使用它,因为文件太大而无法存储在变量中(服务器内存已用尽)。
如何确定文件的字符编码?我可以先得到x个字符并检查一下吗?这样可以保证我的整个文件都是这种编码吗?
或者,我可以在不知道当前文件编码的情况下简单地将整个csv转换为UTF-8吗?
答案 0 :(得分:1)
否,您不能仅使用前x个字符来确定编码。您可以猜测,但猜测可能是错误的。该文件可能是UTF-8,但x个字符前不包含UTF-8。如果可能包含与ASCII兼容的其他编码,则只能在字符x之后加上bot。
不,您不能在不知道当前文件编码的情况下转换文件。
答案 1 :(得分:0)
您可以使用iconv(http://php.net/manual/en/function.iconv.php#49434)直接进行转换,如您所说
答案 2 :(得分:0)
“请问,巴贝奇先生,如果您将错误的数字输入机器,会得出正确的答案吗?”我无法正确理解可能引起此类问题的那种混乱观念。
-查尔斯·巴贝奇(Charles Babbage),1864年。
您缺少元数据,并且建议输入值,无论它们是否正确。
只有作者/发送者可以通过一些标准,规范,约定,协议或通讯方式告诉您。通过HTTP传输数据时,常见的通信方法是Content-Type标头。
不幸的是,在我们的行业中,文本文件和流的元数据通信不足是很常见的。它起源于1970年代和80年代,当时文本文件在收到后便转换为本地字符编码。那不再适用,什么也没有真正取代。
不回答:
从ISO-8859-1进行转换将永远不会失败,因为它使用任何顺序的所有256字节值。
转换为任何当前Unicode编码(包括UTF-8)都不会失败,因为它们全部都支持整个Unicode字符集,并且Unicode包含了您今天可能会看到的每个计算机化字符。
< / li>但是,等等,对于CSV,还有更多需要的元数据:
请记住,如果您要猜测其中的任何一个,并且数据源是可更新的,那么今天的猜测明天可能就行不通了。