XiaO

2 UTF-8

XiaO / 2023-06-01


编码

文本文件有多种编码格式,常见如下:

UTF-8、UTF-16 和 UTF-32 的区别:

乱码

如果文件使用的编码格式与打开文件所用工具的编码格式不匹配,就会导致乱码。确保使用正确的编码格式打开文件。

在实践中,通常可以通过编码转换工具将文本文件的编码格式进行转换。然而,需要注意的是,转换过程中可能会出现一些字符无法准确表示的问题,因为不同编码之间的字符映射并非完全相同。因此,在转换编码时,应确保目标编码能够正确表示源文本中的所有字符。

转码

文件编码自动识别工具 uchardet 是一个编码检测库,它可以对没有附加信息的未知字符编码的字节序列进行处理,并试图确定文本的编码。返回的编码名称与 iconv 兼容。

安装 uchardet:

brew install uchardet

使用 Automator 创建如下脚本:

export PATH=/usr/local/bin:$PATH

for f in "$@"; do
  file_path=$(dirname "$f")
  file=$(basename "$f")
  file_name="${file%.*}"
  ext="${file##*.}"

  supported_ext=("txt" "md" "lrc" "sub" "srt" "log" "cue") # add other file extensions here

  if [[ " ${supported_ext[@]} " =~ " ${ext} " ]]; then
    encoding=$(uchardet "$f") # Detect the original encoding
    iconv -f "$encoding" -t UTF-8 "$f" > "$file_path/$file_name.tmp.$ext" && mv "$file_path/$file_name.tmp.$ext" "$file_path/$file_name.$ext" # Convert to UTF-8 and save with the same name
  else
    echo "File extension is not supported for conversion: $ext"
  fi
done

下载并安装该 Workflow,即可使用。

当然了,对于个别无关紧要的文件,也可以使用在线编码转换工具,简单粗暴但解决问题。