我正在手动将远程 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(我也不知道该怎么做)。