![处理编码为 Windows-1250 和 UTF-8 的文本文件](https://linux22.com/image/1126457/%E5%A4%84%E7%90%86%E7%BC%96%E7%A0%81%E4%B8%BA%20Windows-1250%20%E5%92%8C%20UTF-8%20%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我经常在 Ubuntu 和 Windows 之间切换,因此在文本文件编码方面遇到了一些问题。
如果我在 Ubuntu 中保存文本文件,则两个系统都可以正常工作。但 Ubuntu 无法发现使用 Windows 保存的文件的编码。每次我在 Ubuntu 文本编辑器中打开“windows 文件”时,我都必须更改编码选项。
解决方案是将编码从 Windows-1250 更改为 utf-8。
因此,问题是如何使用 Windows-1250 打开每个文件并使用 utf-8 保存,对于当前目录的子目录中的每个文件(我的意思是递归)。我可以在终端中执行此操作吗?还是我需要一些外部应用程序。
我期待您的帮助。
答案1
我更喜欢使用recode
它。它不是默认安装的,但可以通过同名包使用。它还将 CRLF 行尾更改为 LF。
sudo apt-get install recode
recode cp1250.. file.txt
您可以对整个目录中的所有 txt 文件执行此操作
recode cp1250.. ./*.txt
并递归地结合find
find . -type f -name "*.txt" -exec recode cp1250.. {} +
标准选项是使用iconv
默认安装的命令,但这不会改变行尾,因此您需要在另一个步骤中执行此操作:
iconv -f cp1250 < file.txt | sed $'s/\r$//' > newfile.txt
从长远来看,我建议将 Windows 编辑器的默认字符集和行尾更改为 UTF-8 和 UNIX 行尾(LF,\n
),以避免事后进行转换。
碳排放方法回车符(\r
)
如果方法换行(\n
)
Windows 系统同时使用这两种方法,但类 Unix 系统仅使用如果。
答案2
Sublime Text 可以非常轻松地将文件保存为不同的编码。您还可以使用不同的编码重新打开并处理多个文件,请查看此处回答更多细节。