常见中文乱码类型及其转换脚本
有一个可以尝试恢复乱码的网站:乱码恢复
��ã����磡
黑色菱形问号方块伴古文,这是使用 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