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

admin | 怀旧特辑

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

��ã����磡

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

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

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

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

将 GBK 转换为 UTF-8:

iconv -f GB18030 -t UTF-8 >

批量将 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 | iconv -f UTF-8-Mac -t latin1

%E4%BD%A0

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

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

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

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