处理编码为 Windows-1250 和 UTF-8 的文本文件

dag*_*i12 5 command-line windows bash encoding

我经常在 Ubuntu 和 Windows 之间切换,因此我有一些文本文件的编码问题。

如果我在 Ubuntu 中保存文本文件,则在两个系统中一切正常。但是 Ubuntu 没有发现用 Windows 保存的文件的编码。每次我在 Ubuntu 文本编辑器中打开“windows 文件”时,我都必须更改编码选项。

解决方案是将编码从 Windows-1250 更改为 utf-8。

所以问题是如何用 Windows-1250 打开每个文件并用 utf-8 保存它,对于当前目录子目录中的每个文件(递归我的意思)。我可以在终端中完成还是需要一些外部应用程序。

我期待着你的帮助。

gei*_*rha 8

我更喜欢用recode这个。它不是默认安装的,但可以通过同名的包获得。它还将 CRLF 行结尾更改为 LF。

sudo apt-get install recode
recode cp1250.. file.txt
Run Code Online (Sandbox Code Playgroud)

您可以对整个目录中的所有 txt 文件执行此操作

recode cp1250.. ./*.txt
Run Code Online (Sandbox Code Playgroud)

并递归地结合 find

find . -type f -name "*.txt" -exec recode cp1250.. {} +
Run Code Online (Sandbox Code Playgroud)

标准选项是使用iconv默认安装的命令,但这不会更改行尾,因此您需要在另一个步骤中执行此操作:

iconv -f cp1250 < file.txt | sed $'s/\r$//' > newfile.txt
Run Code Online (Sandbox Code Playgroud)

从长远来看,我建议将 Windows 编辑器的默认字符集和行尾更改为 UTF-8 和 UNIX 行尾 (LF, \n),以避免事后进行转换。


CR表示回车( \r)
LF表示换行( \n)

Windows 使用两者,但类 Unix 系统仅使用LF