如何使用 convmv 强制转换

如何使用 convmv 强制转换

我有很多文件名为 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

  1. 注释第 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);
    
  2. 并将其(第 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);
    

相关内容