Skip to content

cue文件批量转换UTF-8编码#

达菲系统不支持GB2312编码的cue文件,需要转换为UTF-8编码。

这里介绍一种批量转换方法,从GB2312批量转换为UTF-8编码。亲测有效。

环境#

  • 操作系统:Ubuntu Desktop 22.04

准备脚本#

用到的命令有2个(都是系统预装的,不需要额外安装)

  • iconv -f gb2312 -t utf-8 "filename" -c -o "filename.tmp"
    • 从gb2312编码转换为utf-8编码,并保存-o到另外一个文件
    • -c: omit invalid characters from output
    • 注意原文件必须是GB2312,否则也能转换成功,但是转换后的文件乱码。所以需要先判断编码类型
  • file --mime-encoding -b filename
    • 输出文件名及其编码信息
    • -b是 brief 的意思会省略文件名

编辑脚本文件~/bin/iconv-gb2312-to-utf8.sh,内容如下:

#!/bin/sh -e

convert() {
    if [ ! -f "$1.bak" ]; then
        echo "back up to: $1.bak"
        cp "$1" "$1.bak";
    fi

    echo -n "converting, "
    iconv -f gb2312 -t utf-8 "$1" -c -o "$1.tmp"
    mv "$1.tmp" "$1" -f;
    echo "done!"
}

isgb2312() {
    if [ "$1" = "iso-8859-1" ]; then
        echo "1"
        return
    fi

    echo "0"
}

main() {
    file --mime-encoding "$1"

    ENCODING=`file -b --mime-encoding "$1"`

    if [ "$(isgb2312 $ENCODING)" = "1" ]; then
        convert "$1"
    fi
}

main "$@"
  • 添加执行权限chmod +x ~/bin/iconv-gb2312-to-utf8.sh
  • 脚本放~/bin下面会被环境变量PATH收集到,需要重开一下terminal。
    • 原因在~/.profile文件:
# 。。。
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

执行脚本#

在含cue文件夹执行以下命令

find ~+ -iname "*.cue" -and -type f -exec iconv-gb2312-to-utf8.sh "{}" \;
  • find命令会查找所有cue文件(包括子孙目录),交给脚本进行编码转换
  • ~+是为了让find输出full path,即输出绝对路径(可能这里非必要,没有测试)