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

前端之家收集整理的这篇文章主要介绍了如何在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'}

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

原文链接:https://www.f2er.com/linux/402507.html

猜你在找的Linux相关文章