linux - 查找文本文件的编码

标签 linux file bash text encoding

我有一堆具有不同编码的文本文件。但我想把所有的都转换成utf-8。由于大约有1000个文件,我无法手动完成。我知道 llinux 中有一些命令可以将文件的编码从一种编码更改为另一种编码。但我的问题是如何自动检测文件的当前编码?显然我正在寻找一个命令(例如 FindEncoding($File) )来执行此操作:

foreach file
do
$encoding=FindEncoding($File);
uconv -f $encoding -t utf-8 $file;
done

最佳答案

我通常这样做:

for f in *.txt; do
    encoding=$(file -i "$f" | sed "s/.*charset=\(.*\)$/\1/")
    recode $encoding..utf-8 "$f"
done

请注意,重新编码将覆盖更改字符编码的文件。 如果无法通过扩展名识别文本文件,则可以使用 file -bi | cut -d ';' -f 1 确定它们各自的 mime 类型。 .

首先检查 UFT-8 来避免不必要的重新编码可能也是一个好主意:

if [ ! "$encoding" = "utf-8" ]; then
    #encode

经过此处理后,可能仍然有一些文件带有 us-ascii编码。原因是 ASCII 是 UTF-8 的子集,除非引入了 ASCII 无法表达的任何字符,否则 ASCII 仍在使用。在这种情况下,编码会切换为 UTF-8。

关于linux - 查找文本文件的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12866068/

相关文章:

java - 通过 java 套接字发送文件

java - 带空行的缓冲阅读器 readLine()

linux - 从 bash 脚本启动 Node 脚本

linux - 在 bash 中打印字符串模式和新行之间的文本

用 libtasn1.h 编译 c

linux - 用 sed 删除字符串的组合

linux - '^' 在这种情况下是什么意思?

arrays - xcode、ios8、swift、文件和数组

linux - Bash,显示特定文件夹中的进程

bash - 将简单的 ascii 表转换为 CSV