Назад | Перейти на главную страницу

Debian, как преобразовать файловую систему из ISO-8859-1 в UTF-8?

У меня есть старый компьютер, на котором установлен стабильный Debian, который нуждается в обновлении. Проблема в том, что он использует latin1 (ISO-8859-1) для всего, и, поскольку остальной мир перешел на UTF-8, я планирую преобразовать и этот компьютер.

И в этом вопросе я сосредоточусь на файлах, которые обслуживаются Samba, и некоторые из них содержат символы latin1 в именах файлов (например, åäö).

Теперь я планирую переместить все данные с этого старого компьютера на новый, на котором работает стабильная версия Debian (но с UTF-8).

У кого-нибудь есть хорошая идея?


Заметка: в дальнейшем планирую использовать iconv чтобы преобразовать содержимое некоторых файлов примерно так:

iconv --from-code=ISO-8859-1 --to-code=UTF-8 iso.txt > utf.txt

Однако я не знаю, как правильно преобразовать файловую систему.

Заметка: Обычно я просто scp с одного компьютера на другой, но затем я получаю символы latin1 в файловой системе utf-8.


Обновить: Сделал небольшой тестовый раунд с полным набором файлов (с забавными символами) в именах файлов, и похоже, что это может сработать.

convmv -r -f ISO-8859-1 -t UTF-8  *

Заметка: -r = рекурсивный; -f/-t = от / до.

Так что это было только для выполнения с --notest

convmv -r -f ISO-8859-1 -t UTF-8 --notest *

Больше ничего.

Используйте convmv:

Package: convmv
Priority: optional
Section: utils
Installed-Size: 88
Maintainer: Raphael Zimmerer <killekulla@rdrz.de>
Architecture: all
Version: 1.12-1
Depends: perl
Filename: pool/main/c/convmv/convmv_1.12-1_all.deb
Size: 20052
MD5sum: dcc45d5b8517026f588d769d81d67768
SHA1: 55da9650cfee5c64d8a4fdf278aaf9401a5e5dec
SHA256: 0a8b0165a78dc42f7dc665a14d21c22ce0433d115fe537be2af74682d3b82a5f
Description: filename encoding conversion tool
 convmv can convert a single filename, a directory tree or all files
 on a filesystem to a different encoding. It only converts the
 encoding of filenames, not files contents. A special feature of
 convmv is that it also takes care of symlinks: the encoding of the
 symlink's target will be converted if the symlink itself is being
 converted.
 .
 It is also possible to convert directories to UTF-8 which are already
 partially UTF-8 encoded.
 .
 Keywords: rename, move
Tag: devel::i18n, implemented-in::perl, interface::commandline, role::program, scope::utility, works-with::file

apt-get install convmv

:-)

Примечание для читателей, которые зашли на эту страницу до того, как перенесли файлы:

вы можете выполнить передачу с помощью недавнего rsync и параметра --iconv:

rsync -va --iconv=utf8,iso88591 /source/latin1/ /destination/utf8

(да, порядок кодировки iconv не интуитивно понятен!)

Поскольку, когда передача уже выполнена, действительно решение - convmv.

Есть Конвертер кодировки символов Unicode который поддерживает преобразование кодировки символов между Unicode (UTF-8 / UTF-16 / UTF-7 / UTF-32) и не Unicode (Ansi, китайский упрощенный GBK, китайский традиционный BIG5, японский SHIFT-JIS, японский EUC-JP, корейский euc -kr символы установить кодировку и т. д.).

Выполните это в текущем каталоге:

 for f in `ls`; do
 iconv --from-code=iso-8859-1 --to-code=utf-8 $f -o $f;
 done

Я бы сначала проверил, нет ли файла в целевой кодификации, иначе вы можете испортить свои файлы, я думаю. (приведенный ниже пример для zsh) вы можете адаптировать код и поместить его в цикл for.

codification="`file -bi "$1" | awk -F"=" '{print $NF}'`"

[[ "$codification" != "utf-8" ]]  && iconv -f ISO8859-1 -t UTF-8 "$1" > $outfile