如何在Linux上告诉文件名的语言编码?

如何在Linux上告诉文件名的语言编码?,第1张

概述我有一个目录,包含来自外部源的~10,000个图像文件. 许多文件名包含不对数据库友好或Web友好的空格和标点符号.我还想在每个文件名的末尾附加一个SKU号码(用于记帐).许多(如果不是大多数)文件名也包含扩展的拉丁字符,我想保留用于搜索引擎优化目的(特别是文件名准确地表示Google图像中的文件内容) 我制作了一个bash脚本,它将所有文件重命名(复制)到我想要的结果. bash脚本以UTF-8 我有一个目录,包含来自外部源的~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次.我想要一个比’看起来正确’更自动化的方法!

@H_403_13@解决方法 真的没有100%准确的方法,但有一种方法可以做出很好的猜测.

这里有一个python库chardet:https://pypi.python.org/pypi/chardet

例如

查看当前LANG变量的设置:

$echo $LANGen_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'}

如你所见,这只是猜测. “置信度”变量显示的猜测有多好.

总结

以上是内存溢出为你收集整理的如何在Linux上告诉文件名的语言编码?全部内容,希望文章能够帮你解决如何在Linux上告诉文件名的语言编码?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1045487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存