MacOS 下载的文件名字乱码问题

第一种乱码类型

在网络上查了一圈,找到三个相关答案:

  1. 下载的文件名总是「乱码」?这里有各平台的解决方法 :
    https://sspai.com/post/44360
    Automator 流程:
    https://cl.ly/2v1E3n3f1q2M
  2. Mac OS X 下文件名乱码出现的原因和解决方法:
    https://zzi.io/?p=275
  3. 预组字符:
    https://zh.wikipedia.org/wiki/预组字符

乱码一:

FCPXæ??件ï¼?ç§?ç®?æ´?è¿·ä½ LOGOæ ?å¿?å±?示ç??头Minimal Logo Stings.dmg

修复后:

FCPX插件:20个现代字幕条动画Modern Lower Thirds .dmg

参考一中的代码是关键:

for f in "$@"
do
    fileName=$(basename ${f})
    filePath=$(dirname ${f})

    # 两种乱码类型 GBK、UTF-8
    { fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1 | iconv -f gbk)
    } || { fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1)
    }  || { fileNewName=$(echo $fileName) | iconv -f UTF-8-Mac -t GBK 
   } # 更新 2021-03-12

    # 文件名正常或乱码类型不属上述两种时,新文件名为空,则跳过
    if [ -n "$fileNewName" ]; then
        # 避免文件重复:如果已存在修复后的文件名,则在新文件名后加上随机字符串。
        if [ -e ${filePath}/$fileNewName ]; then
            mv "$f" "${filePath}/${fileNewName}-${RANDOM}"
        else
            mv "$f" "${filePath}/${fileNewName}"
        fi
    fi
done

制作“服务”步骤

  1. 打开automator


    1. 打开automator
  2. 创建 quick action 类型


    2. 创建 quick action 类型
  3. 将run shell script 拖到右边下面


    3. 将run shell script 拖到右边下面
  4. 将粘贴代码到 do/done 之间


    4. 将粘贴代码到 do/done 之间

保存上面的得到的文件,系统会自动加载该文件,变成“右键”的服务。

8fb4dbdd32fc8fc8c5b6e13a7187d25a.gif

此处作废【更新 2019-10-31】

我们使用参考一的文件,下载后,双击安装,点击文件,右击就可以改名了。

image.png

解释

utf-8-mac(Decomposed) latin1(Precomposed)

我们试图解读一下,其中 iconv -f utf-8-mac -t latin1 是将字符先进行 precomposed 处理,接着 iconv -f gbk,那么为什么要这么处理呢?因为MacOS默认使用 "decomposed" 的字符编码。什么是 decomposedprecomposed 呢?

瑞典语 的姓氏 Åström 可以有两种Unicode表示方式,第一种采用预组字符Å (U+00C5)与ö (U+00F6), 第二种采用可分解基本字符A (U+0041)与上圆圈 (附加符号) (U+030A) 以及o(U+006F)与分音符 (U+0308).

  1. Åström (U+00C5 U+0073 U+0074 U+0072 U+00F6 U+006D)
  2. Åström (U+0041 U+030A U+0073 U+0074 U+0072 U+006F U+0308 U+006D)

说人话就是:window系统是用 拉丁字母+acute 的 precomposed 方式,而 mac 系统使用 拉丁字母+acute1+acute2 的方式。

第二种乱码类型

乱码二:

%E7%BB%8F%E6%B5%8E%E5%AD%A6%E7%9A%84%E6%80%9D%E7%BB%B4%E6%96%B9%E5%BC%8F++%E4%BF%AE%E8%AE%A2%E7%AC%AC12%E7%89%88.pdf

修复后:

经济学的思维方式++修订第12版.pdf

如果文件名出现了 % 符号是使用了encodeURI将文件名编码(参考 这里
),而下载的时候被编码过的文件名没有被改过来,就直接下载了,所以显示的乱码。修复代码如下:

for file in "$@"
do
    # 等号两边不能有空格,不然没法执行
    fileName=$(basename -- "$file")  
    filePath=$(dirname -- "$file")
    newName=$(echo -e "$fileName"| perl -pe 'y/+/ /;s/\%(\w\w)/chr hex $1/ge')

    # 重命名文件
    mv "$file" "${filePath}/${newName}"
    echo %文件名乱码修复成功!
done

效果如下:

urldecode.gif

制作步骤同上

  1. automator 里面新建服务,
  2. 找到run shell script——粘贴代码
  3. 找到set value of variable,拖到run shell script下面,设置一个变量如: output
  4. 找到Display Notification,拖到set value of variable下面,输入变量名:output
  5. 保存。在右键就可以看到服务了。
image.png

第三种乱码 [更新 2021-03-12]

闂茶瘽ID锛圛nDesign CS5锛夊彜绫嶆帓鐗堝強鐩稿叧闄勪欢

此乱码来自MAC把GBK编码以UTF-8-MAC解析得到的乱码,可以根据依据一下代码解析:

echo "闂茶瘽ID锛圛nDesign CS5锛夊彜绫嶆帓鐗堝強鐩稿叧闄勪欢" | iconv -t gbk
echo '闂茶瘽ID锛圛nDesign CS5锛夊彜绫嶆帓鐗堝強鐩稿叧闄勪欢' | \
python3 -c 'import sys; str=sys.stdin.readlines();str=str[0].encode("gb18030").decode("UTF_8");print(str)'

参考

  1. http://mirror.informatimago.com/next/developer.apple.com/qa/qa2001/qa1235.html

    Q: How do I convert a Unicode string to its precomposed form?

    A: It is possible to convert a string to precomposed Unicode using APIs introduced in Mac OS X 10.2. The rest of this Q&A explains the difference between precomposed and decomposed Unicode, why you might want to convert to precomposed Unicode, and how to do so.

    Precomposed versus Decomposed

    Certain Unicode characters can be encoded in more than one way. For example, an Á (A acute) can be encoded either precomposed, as U+00C1 (LATIN CAPITAL LETTER A WITH ACUTE), or decomposed, as U+0041 U+0301 (LATIN CAPITAL LETTER A followed by a COMBINING ACUTE ACCENT). Precomposed characters are more common in the Windows world, whereas decomposed characters are more common on the Mac.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 82,744评论 1 181
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 29,539评论 1 149
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 34,489评论 0 105
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 18,962评论 0 90
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 24,293评论 0 150
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 20,125评论 1 90
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 12,776评论 2 168
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 12,169评论 0 83
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 10,704评论 5 116
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 13,972评论 0 132
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 12,645评论 1 130
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 13,506评论 0 135
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 8,266评论 0 18
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 11,096评论 2 122
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 14,283评论 3 132
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 9,875评论 0 3
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 10,235评论 0 81
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 14,870评论 2 140
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 15,332评论 2 136

推荐阅读更多精彩内容