3

У меня Windows 7 с файловой системой NTFS. У меня есть имена файлов и каталогов, как:

Kispál és a Borz - 02 - Tökéletes Helyettes

Я хочу преобразовать их в:

Kispál és a Borz - 02 - Tökéletes Helyettes

Файловая система способна хранить имена файлов, такие как フリー百科事典 , поэтому она, безусловно, поддерживает юникод.

Как я представляю историю, давным-давно они были идеальными. Затем они были перенесены из UTF-8 в файловую систему Latin-1, а затем обратно в эту файловую систему, поддерживающую UTF-8. Теоретически вся информация есть, я мог бы написать программу на C для исправления этих символов, но я предполагаю, что кто-то где-то уже это сделал.

Знаете ли вы какую-либо утилиту, которая может сделать преобразование?

4 ответа4

1

Моя проблема заключалась в том, что Windows 10 Explorer неправильно отображал имена файлов Unicode. Название было в Юникоде, но на экране был виден мусор. Ответ был, что проблема ушла, когда я перезагрузился.

0

Позвольте мне подробнее остановиться на ответе динара Курбанова. Чтобы исправить кодировку имен файлов в Total Commander v7 или новее, вам нужно использовать инструмент многократного переименования (Ctrl+M).

Там вы найдете кнопку в виде папки, нажмите ее и выберите «Редактировать имена», чтобы получить текстовый файл, содержащий имена файлов. После исправления с помощью любого инструмента / редактора вы можете вставить их обратно и закрыть редактор.

Кнопка для редактирования имен файлов

0

их можно исправить с помощью общего инструмента переименования Total Commander с кнопкой редактирования имени файла.

0

Я написал гибрид C / C++, который выполняет часть перевода (ничего не переименовывает, просто преобразует плохие байтовые последовательности в хорошие). Вы можете скачать его по ссылке в конце этого поста.

Входной файл декодируется как поток UTF-8 в последовательность кодовых позиций UNICODE, которая НЕ конвертируется в любую другую кодовую страницу. Все позиции кода меньше 256, они представляют последовательность байтов исходной строки UTF-8. Поэтому я просто записываю эти позиции кода как байты в вывод. Результатом является правильная строка UTF-8. Это все еще не приложение для моей проблемы, но суть решения.

Программа написана и протестирована под Linux, но должна работать на любой ОС. Пример использования:

nil@hippy:~/playground/c++$ g++ utf8decode.cpp -o utf8decode
nil@hippy:~/playground/c++$ cat > file
Kispál és a Borz - 02 - Tökéletes Helyettes
nil@hippy:~/playground/c++$ cat file | ./utf8decode
Kispál és a Borz - 02 - Tökéletes Helyettes
Characters found: 48
nil@hippy:~/playground/c++$

Я написал счетчик символов UTF-8 и изменил его. Я не написал всю программу за час. Источник: http://pastebin.com/Hy7tVt5A http://pastebin.com/NFJUP0R5

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