我还有另一个 UTF-8 问题。我使用munpack -C $extrdir $file
自动从收到的电子邮件中提取 JPG 文件fetchmail
。之后我使用bash
和imagemagick
来处理我可以用 获得的图像find -iname "*.jpg*" -o -iname "*.jpeg*" -o -iname "*.JPEG*" -o -iname "*.JPG*"
。只要文件名中不添加空格或特殊字符,这种方法对大多数图像都适用。
在电子邮件源代码中,文件名写为
Content-Disposition: attachment; filename="=?UTF-8?B?V2FuZGVydW5nIFNwaWVsd2VnIDIuSlBH?="
.munpack
将文件另存为
=XUTF-8XBXV2FuZGVydW5nIFNwaWVsd2VnIDIuSlBHX=
我可以添加"*XUTF*"
到find
,但其他类型的附件(如 txt 文件)imagemagick
也可能会被处理。munpack
还将“?”替换为“X”,这就是我无法解码文件名的原因。
你有解决这个问题的办法吗?
提前致谢!
答案1
这个解决方法对我有用。不幸的是,文件名丢失了。但这不是我想要的。
使用munpack
并通过管道将输出传输到文件中:
munpack -C $extrdir $file > attachments
attachements
您现在将看到提取的文件内容:
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDExLkpQRw==X= (image/jpeg)
=XUTF-8XBXV2FuZGVydW5nTGFpdHNjaGVuYmFjaDE3LkpQRw==X= (image/jpeg)
...
现在循环遍历每一行,检查它是否是图像并重命名它们:
while read p; do
if [[ $p == *"image"* ]]
then
FLNM=attach_${num}.jpg
IFS=' (' read -a array <<< "$p"
mv "${array[0]}" "$FLNM"
fi
num=$((num + 1))
done <attachements
目录中的输出将是:
attach_1.jpg
attach_2.jpg
attach_3.jpg