如何在MIME类型配置中使用十六进制魔数值识别不可打印字符开头的.gp文件
如何在MIME类型配置中使用十六进制魔数值识别不可打印字符开头的.gp文件
嗨,我来帮你搞定这个问题!你猜的没错,对于开头是不可打印字符的文件,我们确实需要用十六进制字节值来配置magic规则,而不是之前用的字符串匹配。
先看你的.gp文件的xxd输出:开头四个字节的十六进制是50 4b 03 04,这其实是标准Zip文件的签名(对应ASCII的PK),但你需要把它识别为GuitarPro的文件类型,所以我们可以直接针对这个十六进制字节串来写magic规则。
具体的配置方法很简单,只需要在<match>标签里把type设为hex,然后value填你要匹配的十六进制字节(不用空格,直接连起来写),offset保持0(从文件开头开始匹配)。另外注意优先级:因为系统大概率已经有识别Zip文件的magic规则,你需要把这个规则的priority设得比Zip的默认优先级高(比如设为60,默认Zip可能是50),这样系统会优先把.gp文件识别为你的GuitarPro类型,而不是普通Zip。
给你一个完整的配置示例:
<mime-type type="audio/x-gtp"> <comment>Old GuitarPro .gp file</comment> <magic priority="60"> <!-- 匹配文件开头的50 4b 03 04十六进制字节 --> <match value="504b0304" type="hex" offset="0" /> </magic> <glob pattern="*.gp"/> </mime-type>
这样配置之后,系统就能通过文件开头的十六进制字节,正确把.gp文件识别为你指定的MIME类型了,完美解决不可打印字符无法用字符串匹配的问题!
备注:内容来源于stack exchange,提问作者Magenta
相关产品推荐
相关产品推荐

