如何将文件从 Windows 共享复制到 Linux 并保留字符集

如何将文件从 Windows 共享复制到 Linux 并保留字符集

我正在手动将远程 Windows 共享备份到我的 Ubuntu 服务器。这很简单,只需使用 mount -t cifs 安装共享并在其上运行 rsync 即可。

我的问题是文件中的重音符号或特殊字符,例如欧元货币符号(不仅在文件名中)。例如,如果我使用记事本或写字板等在远程 Windows 7 主机上编辑/查看文本文件,我可以看到欧元符号 €。但是,当我将文件 rsync 到 Ubuntu Linux 时,无论我使用 cat、mc、nano 还是 gedit 查看,文本文件都包含一个奇怪的符号而不是货币符号。

我还尝试过更改 Ubuntu 上的语言环境,但没有成功。我可以直接在 Ubuntu 主机上键入 ruo 符号并创建一个新的文本文件。所以问题可能出在 mount.cifs 或 rsync 上。我阅读了 mount 的 iocharset 选项并尝试了几个值,但没有成功。

使用 rsync 时我只使用 -a 选项。

有什么建议吗?我可以尝试/测试什么?

谢谢

[更新 2017 年 2 月] 在我的 Windows 7 系统上我运行了:

chcp
Active code page: 850

但是,在我的 Ubuntu 机器上,以下命令不会生成一个文件,我可以使用“cat”或“more”正确显示欧元符号。

sudo iconv -f CP850 -t UTF-8 /Windows/share/README.txt > /tmp/README.txt 

但是,另一个命令确实可以。

sudo iconv -f CP1252 -t UTF-8 /Windows/share/README.txt > /tmp/README.txt 

为什么?

不幸的是,我无法对数千个文件运行 iconv,而且无法在每次 rsync 之后执行此操作。

我发现可以通过在终端 Shell 中启用 WINDOWS-1252 编码来避免运行 iconv。然后,Windows 文件上的“cat”或“more”可以正确显示欧元符号。

但是,在 Ubuntu 中通过“文件”浏览器使用 gedit 打开同一个 Windows 文件时,欧元符号再次错误显示。所以我想我应该在 Ubuntu 上全系统启用 WINDOWS-1252(我该怎么做?)或强制 Windows 系统使用 UTF-8(我也不知道该怎么做)。

相关内容