我需要检测Ruby中的文件类型和编码。
我目前正在通过magic gem使用libmagic,但是它有一个问题:如果它们没有BOM,它不会检测到UTF-16文件。 This是此类文件的示例。
$ file -i text_without_bom.txt
text_without_bom.txt: application/octet-stream; charset=binary
还有其他可以用来正确检测UTF-16文件的库或方法吗?
P。 S.也尝试rchardet和charlock_holmes,但运气不佳。
答案 0 :(得分:2)
不可能可靠地检测文本文件的编码。您必须被带外告知编码是什么。
原因很简单:有大量的8位编码。在这些编码中,每 8位组合都是有效字符。由于每8位组合都是每8位编码中的有效字符,因此任意任意文本文件以及实际上任何任意 文件都是< em>任何 8位编码。
例如,在ISO 8859-15中,€
是欧元符号0xA4
。在ISO 8859-1,CP1252和Unicode中,¤
是国际货币符号0xA4
。因此,如果您的文件包含class GridLayout<T> extends React.Component<VideoLayoutProps<T>>
,则无法确定它是ISO 8859-15,ISO 8859-1,CP1252,UTF-16中字符的一半,UTF中字符的四分之一-32,UTF-8中多字节序列的中间,或其他多种可能性之一。
答案 1 :(得分:-1)
您始终可以切断BOM并在没有它的情况下处理文件。 This描述了如何完成。