我有很多文件名为 windows-1251 编码的文件。我想将其转换为 utf8。但我不小心用 convmv 错误地将其转换了:
convmv -r --notest -f windows-1255 -t utf8 *
因此现在我需要再次将其从 utf8 转换为 windows-1255,然后再从 windows-1251 转换为 utf8,但 convmv 不想这样做:
convmv --notest -f utf8 -t windows-1255 זטחם�.docx
cp1255 doesn't cover all needed characters for: "./זטחם�.docx"
To prevent damage to your files, we won't continue.
First fix this or correct options!
convmv 有任何--force
选项吗?如何在不使用 convmv 的情况下修复文件的文件名?
这是文件示例http://fbe.am/l8O
答案1
这不是一个好主意
这convmv
只是一个简单的 Perl 脚本,因此代码很容易编辑。它设置为在某些测试失败时退出,通过告诉它忽略测试结果并继续,我可以做到:
../convmv.modified.pl --notest -f utf8 -t windows-1255 זטחם�.docx
Your Perl version has fleas #37757 #49830
cp1255 doesn't cover all needed characters for: "./זטחם�.docx"
mv "./זטחם�.docx" "./����"
Ready!
这创建了一个名为的文件????
,然后我可以使用常规方式convmv
将其编码更改为 utf8(必须使用,find
因为我无法给出????
文件名):
find . -type f -exec convmv --notest -f windows-1255 -t utf8 {} \;
$ find . -type f -exec convmv --notest -f windows-1255 -t utf8 {} \;
Your Perl version has fleas #37757 #49830
mv "./����" "./זטחם"
Ready!
然后我重命名该文件以添加docx
扩展名(mv זטחם זטחם.docx
)并可以在 libre office 中打开该文件。
这是一个坏主意,因为我没有解决导致无法convmv
正确转换文件的问题,我只是忽略了它。我认为问题在于你第一次错误的转换在文件名中添加了奇怪的字符,而这些字符convmv
不知道如何处理。我无法保证(甚至无法就是否这样做发表意见)这不会损害你的文件。我建议你尝试一下一先归档,看看它是否真的有效。
另一个问题是,我期望文件名与文件文本的字母表相同,但事实并非如此(我认为),因此整个操作可能失败了。由于我无法读取相关字母表,因此我无法确定。
无论如何,如果您想尝试这一点,您需要进行以下更改/usr/bin/convmv
:
注释第 359 行,将其更改:
die "To prevent damage to your files, we won't continue.\nFirst fix errors or correct options!\n" if ($errors_occurred);
对此:
#die "To prevent damage to your files, we won't continue.\nFirst fix errors or correct options!\n" if ($errors_occurred);
并将其(第 460 行)更改为:
from_to($newname, $opt_f, $opt_t, Encode::FB_QUIET) or die "SHOULD NOT HAPPEN HERE: conversion error, so suitable charset used?: \"$oldfile\"\nTo prevent damage to your files, we won't continue. First fix this!\n";
更改为:
from_to($newname, $opt_f, $opt_t, Encode::FB_QUIET);