Debian,如何将文件系统从 ISO-8859-1 转换为 UTF-8?

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从一台计算机转移到另一台计算机,但最终在 utf-8 文件系统中出现了 latin1 字符。


更新:用一些文件名中带有奇怪字符的文件进行了一轮小测试,似乎可以起作用。

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

笔记-r= 递归;-f/ -t= 从/到。

因此,只需执行--notest

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

仅此而已。

答案1

使用 convmv:

Package: convmv
Priority: optional
Section: utils
Installed-Size: 88
Maintainer: Raphael Zimmerer <[email protected]>
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 安装 convmv

:-)

答案2

在传输文件之前碰到此页面的读者请注意:

您可以使用最近的 rsync 和 --iconv 选项进行传输:

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

(是的,iconv 字符集的顺序并不直观!)

当转移已经完成时,convmv 确实是解决方案。

答案3

有一个Unicode 字符编码转换器支持Unicode(UTF-8/UTF-16/UTF-7/UTF-32)和非Unicode(Ansi、中文简体GBK、中文繁体BIG5、日文SHIFT-JIS、日文EUC-JP、韩文euc-kr字符集编码等)之间的字符编码转换。

答案4

如果文件不在目标编码中,我会先进行测试,否则我猜你可能会弄乱你的文件。(下面的示例为 zsh)你可以调整代码并将其放入“for”循环中。

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

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

相关内容