常见中文乱码类型及其转换脚本

有一个可以尝试恢复乱码的网站:乱码恢复

��ã����磡

黑色菱形问号方块伴古文,这是使用 GBK 读取 UTF-8 的结果。

GBK、GB2312、GB18030 统一用 GBK 指代。

����Ҫ�¨²�ѧϰ������

黑色菱形问号方块伴拉丁字母,这是使用 UTF-8 读取 GBK 的结果。

将 GBK 转换为 UTF-8:

iconv -f GB18030 -t UTF-8 <input>  > <output>

批量将 GBK 转换为 UTF-8:

# 只可以对 GBK/CRLF 文件执行一次,不可重复执行
if [[ -f $1 ]]; then
    # 处理是文件的情况
    file_name=$(basename "$1")
    file_path=$(dirname "$1")
    iconv -f GB18030 -t UTF-8 "$1" >"$file_path/.$file_name.tmp"
    mv "$file_path/.$file_name.tmp" "$1"
    dos2unix "$1"
elif [[ -d $1 ]]; then
    # 处理是目录的情况
    find "$1" -type f -exec bash -c '
            file="$1"
            if file "$file" | grep -i "text"; then
                file_name=$(basename "$file")
                file_path=$(dirname "$file")
                iconv -f GB18030 -t UTF-8 "$file" > "$file_path/.$file_name.tmp"
                mv "$file_path/.$file_name.tmp" "$file"
                dos2unix "$file"
            fi
        ' _ '{}' \;
else
    echo "$1 is not a valid file or directory"
fi

你好,世界!

这是使用 Latin-1(ISO8859-1)读取 UTF-8 的结果

macOS 可能会使用 Latin-1 读取文件名,因此如果要使文件名恢复正常,我们要把 UTF-8 文件名转换成 Latin-1:

echo <file_name> | iconv -f UTF-8-Mac -t latin1

%E4%BD%A0

准确的来说这不算乱码,这是经过 URL 编码之后的中文字符串(百分号 % 后面的是编码的十六进制数)。我们只要把它们解码就可以了。

python3 -c "import sys, urllib.parse; print(urllib.parse.unquote_plus(<input>)) > <output>

参考:下载的文件名总是「乱码」?这里有各平台的解决方法 | 少数派

See also: JAVA 中文字符编码问题详解 | CSDN

image

posted @ 2024-05-08 13:50  Undefined443  阅读(191)  评论(0编辑  收藏  举报