2

У меня было много файлов с именами файлов в кодировке 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!

Является ли какой - либо --force вариант для convmv? Как я могу исправить имена файлов моего файла без convmv?

Вот пример файла http://fbe.am/l8O

1 ответ1

2

ЭТО НЕ ХОРОШАЯ ИДЕЯ

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.


Это плохая идея, потому что я не решил проблему, которая 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);
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .