如何从文件的内容判断一个文件是不是.csv文件
程序员文章站
2024-02-06 12:05:10
...
怎么从文件的内容判断一个文件是不是.csv文件
这里面不允许通过扩张名。怕别人改扩张名
还有我安装里面是否包含逗号不行,因为有的文件是读出的内容也是乱码?结果它就会把乱码读成逗号?
而且我需要判断.csv文件的严谨方法和理论,不能想当然的。其实仅按逗号肯定是不严谨的啊,其实是乱码可能变成逗号,其二一个文件里面有一个逗号算是合格的csv文件了
谢谢,求高手
------解决方案--------------------
没办法
------解决方案--------------------
试试str_getcsv解析
http://php.net/manual/en/function.str-getcsv.php
用是否error来判断
------解决方案--------------------
任何情况下都不会因读取逗号而导致乱码
csv文件是文本文件,唯一可识别的地方就是每行都有相等数量的列分隔符(默认是逗号)
考虑到内容中可能存在逗号(此时内容需要用引号括起),当检测到80%以上行的列分隔符数量相等时,就可认为是合格的csv文件
另外非标准的csv,即字符类型的内容未用双引号括起的csv。至少在 php5.3 for win 是无法用
fgetcsv 或 str_getcsv 函数正确读取的
------解决方案--------------------
csv 文件表达的是一个阵列
如果每行的列数不等,就不是csv
------解决方案--------------------
全称
Comma Separated Values
编辑本段
规则
1 开头是不留空,以行为单位。
2 可含或不含列名,含列名则居文件第一行。
3 一行数据不垮行,无空行。
4 以半角逗号(即,)作分隔符,列为空也要表达其存在。
5 列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
6 列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
7 文件读写时引号,逗号操作规则互逆。
8 内码格式不限,可为 ASCII、Unicode 或者其他。
9 不支持特殊字符
------解决方案--------------------
按规则要求来查
------解决方案--------------------
你希望用户的csv是什么格式?另外对于文件来说,没有乱码的概念,只有字节的概念,
乱码只是若干字节不能在指定的字符集(比如GB2312)里显示而已。
------解决方案--------------------
以半角逗号(即,)作分隔符,列为空也要表达其存在
这点很重要
------解决方案--------------------
找一个csv导成其他格式的类 能导成功的就是 不能的就不是,这曲线救国了吧
------解决方案--------------------
这里面不允许通过扩张名。怕别人改扩张名
还有我安装里面是否包含逗号不行,因为有的文件是读出的内容也是乱码?结果它就会把乱码读成逗号?
而且我需要判断.csv文件的严谨方法和理论,不能想当然的。其实仅按逗号肯定是不严谨的啊,其实是乱码可能变成逗号,其二一个文件里面有一个逗号算是合格的csv文件了
谢谢,求高手
------解决方案--------------------
没办法
------解决方案--------------------
试试str_getcsv解析
http://php.net/manual/en/function.str-getcsv.php
用是否error来判断
------解决方案--------------------
任何情况下都不会因读取逗号而导致乱码
csv文件是文本文件,唯一可识别的地方就是每行都有相等数量的列分隔符(默认是逗号)
考虑到内容中可能存在逗号(此时内容需要用引号括起),当检测到80%以上行的列分隔符数量相等时,就可认为是合格的csv文件
另外非标准的csv,即字符类型的内容未用双引号括起的csv。至少在 php5.3 for win 是无法用
fgetcsv 或 str_getcsv 函数正确读取的
------解决方案--------------------
csv 文件表达的是一个阵列
如果每行的列数不等,就不是csv
------解决方案--------------------
全称
Comma Separated Values
编辑本段
规则
1 开头是不留空,以行为单位。
2 可含或不含列名,含列名则居文件第一行。
3 一行数据不垮行,无空行。
4 以半角逗号(即,)作分隔符,列为空也要表达其存在。
5 列内容如存在半角逗号(即,)则用半角引号(即"")将该字段值包含起来。
6 列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
7 文件读写时引号,逗号操作规则互逆。
8 内码格式不限,可为 ASCII、Unicode 或者其他。
9 不支持特殊字符
------解决方案--------------------
按规则要求来查
------解决方案--------------------
你希望用户的csv是什么格式?另外对于文件来说,没有乱码的概念,只有字节的概念,
乱码只是若干字节不能在指定的字符集(比如GB2312)里显示而已。
------解决方案--------------------
以半角逗号(即,)作分隔符,列为空也要表达其存在
这点很重要
------解决方案--------------------
找一个csv导成其他格式的类 能导成功的就是 不能的就不是,这曲线救国了吧
------解决方案--------------------
相关文章
相关视频