【发布时间】:2015-09-07 17:08:00
【问题描述】:
我如何确保文件可供人类阅读。
我基本上想检查文件是否是txt、yml、doc、json 文件等等。
问题是,在我想要执行此检查的情况下,文件扩展名具有误导性,我的意思是纯文本文件(应该是 .txt)具有.d 和其他各种扩展名: - (
验证文件是否可以被人类读取的最佳方法是什么?
到目前为止,我已经尝试了以下扩展:
private boolean humansCanRead(String extention) {
switch (extention.toLowerCase()) {
case "txt":
case "doc":
case "json":
case "yml":
case "html":
case "htm":
case "java":
case "docx":
return true;
default:
return false;
}
}
但正如我所说,扩展并不像预期的那样。
编辑:澄清一下,我正在寻找一个独立于平台且不使用外部库的解决方案,为了缩小我的意思是“人类可读”,我的意思是包含任何语言字符的纯文本文件,我也是真的不介意文件中的文本是否像编码一样有意义,我现在并不关心。
到目前为止,感谢您的所有回复! :D
【问题讨论】:
-
我无法阅读 docx 和 doc。 (事实上我的电脑也不能。)
-
您可以尝试使用 Apache Tika 获取文件类型(根据内容)。
-
...我能想到几个我也无法阅读的 .txt 文件。 (例如,我敢打赌有一些法语。)我想说的是,不可能按照您的定义准确地实现此方法。
-
@RishavKundu 是的,甚至字符和编码也不同,这就是让这个问题变得异常困难的原因。另一方面,找出某个文件包含某个地方的某个人可能能够阅读的文本又有什么意义呢?如果您的用户无法阅读文本,那么对于他们来说,地球上有人可以阅读,这对他们来说并不是什么安慰。这就是为什么我认为这完全是错误的问题。您应该询问您的用户他们可以阅读哪些内容,并且只搜索那些语言/文件类型,这是一项容易得多的任务。
-
@fillpant 但是字符是符号和字节。您可以使用某些技巧(例如检查文件是否是有效的 UTF-8 序列或给定百分比的字节是否在 32-127 的 ASCII 可打印范围内),但它永远不会涵盖所有编码和所有语言100% 准确。