如何在Linux上告诉文件名的语言编码?
我有一个目录,包含来自外部源的~10,000个图像文件.
许多文件名包含不对数据库友好或Web友好的空格和标点符号.我还想在每个文件名的末尾附加一个SKU号码(用于记帐).许多(如果不是大多数)文件名也包含扩展的拉丁字符,我想保留用于搜索引擎优化目的(特别是文件名准确地表示Google图像中的文件内容) 我制作了一个bash脚本,它将所有文件重命名(复制)到我想要的结果. bash脚本以UTF-8保存.运行后,它省略了大约500个文件(无法统计文件…). 我在目录上运行了convmv -f UTF-8 -t UTF-8,发现这500个文件名没有用UTF-8编码(convmv能够检测并忽略已经在UTF-8中的文件名) 有没有一种简单的方法可以找出他们目前使用的语言编码? 我能够弄清楚自己的唯一方法是将终端编码设置为UTF-8,然后使用convmv迭代所有可能的候选编码,直到它显示“看起来正确”的转换名称.我无法确定这500个文件都使用相同的编码,因此我需要重复此过程500次.我想要一个比’看起来正确’更自动化的方法! 解决方法
真的没有100%准确的方法,但有一种方法可以做出很好的猜测.
这里有一个python库chardet:https://pypi.python.org/pypi/chardet 例如 查看当前LANG变量的设置: $echo $LANG en_IE.UTF-8 创建一个需要用UTF-8编码的文件名 $touch mé.txt 更改我们的编码,看看当我们尝试列出它时会发生什么 $ls m* mé.txt $export LANG=C $ls m* m??.txt 好的,现在我们有一个用UTF-8编码的文件名,我们当前的语言环境是C(标准的Unix代码页). 所以启动python,导入chardet并让它读取文件名.我使用一些shell globbing(即通过*通配符扩展)来获取我的文件.将“ls m *”更改为与您的示例文件匹配的任何内容. >>> import chardet >>> import os >>> chardet.detect(os.popen("ls m*").read()) {'confidence': 0.505,'encoding': 'utf-8'} 如你所见,这只是猜测. “置信度”变量显示的猜测有多好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |