MacOS 下載的文件名字亂碼問題

第一種亂碼類型

在網(wǎng)絡(luò)上查了一圈恩伺,找到三個相關(guān)答案:

  1. 下載的文件名總是「亂碼」?這里有各平臺的解決方法 :
    https://sspai.com/post/44360
    Automator 流程:
    https://cl.ly/2v1E3n3f1q2M
  2. Mac OS X 下文件名亂碼出現(xiàn)的原因和解決方法:
    https://zzi.io/?p=275
  3. 預(yù)組字符:
    https://zh.wikipedia.org/wiki/預(yù)組字符

亂碼一:

FCPX??????????§?????′?è?·?? LOGO? ?????±??¤o????¤′Minimal Logo Stings.dmg

修復(fù)后:

FCPX插件:20個現(xiàn)代字幕條動畫Modern Lower Thirds .dmg

參考一中的代碼是關(guān)鍵:

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
        # 避免文件重復(fù):如果已存在修復(fù)后的文件名官扣,則在新文件名后加上隨機字符串。
        if [ -e ${filePath}/$fileNewName ]; then
            mv "$f" "${filePath}/${fileNewName}-${RANDOM}"
        else
            mv "$f" "${filePath}/${fileNewName}"
        fi
    fi
done

制作“服務(wù)”步驟

  1. 打開automator


    1. 打開automator
  2. 創(chuàng)建 quick action 類型


    2. 創(chuàng)建 quick action 類型
  3. 將run shell script 拖到右邊下面


    3. 將run shell script 拖到右邊下面
  4. 將粘貼代碼到 do/done 之間


    4. 將粘貼代碼到 do/done 之間

保存上面的得到的文件产捞,系統(tǒng)會自動加載該文件醇锚,變成“右鍵”的服務(wù)哼御。

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表示方式,第一種采用預(yù)組字符? (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系統(tǒng)是用 拉丁字母+acute 的 precomposed 方式粥喜,而 mac 系統(tǒng)使用 拉丁字母+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

修復(fù)后:

經(jīng)濟學(xué)的思維方式++修訂第12版.pdf

如果文件名出現(xiàn)了 % 符號是使用了encodeURI將文件名編碼(參考 這里
),而下載的時候被編碼過的文件名沒有被改過來额湘,就直接下載了卿吐,所以顯示的亂碼。修復(fù)代碼如下:

for file in "$@"
do
    # 等號兩邊不能有空格锋华,不然沒法執(zhí)行
    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 %文件名亂碼修復(fù)成功嗡官!
done

效果如下:

urldecode.gif

制作步驟同上

  1. automator 里面新建服務(wù),
  2. 找到run shell script——粘貼代碼
  3. 找到set value of variable毯焕,拖到run shell script下面衍腥,設(shè)置一個變量如: output
  4. 找到Display Notification,拖到set value of variable下面纳猫,輸入變量名:output紧阔。
  5. 保存。在右鍵就可以看到服務(wù)了续担。
image.png

第三種亂碼 [更新 2021-03-12]

闂茶瘽ID錛圛nDesign CS5錛夊彜綾嶆帓鐗堝強鐩稿叧闄勪歡

此亂碼來自MAC把GBK編碼以UTF-8-MAC解析得到的亂碼擅耽,可以根據(jù)依據(jù)一下代碼解析:

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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市物遇,隨后出現(xiàn)的幾起案子乖仇,更是在濱河造成了極大的恐慌,老刑警劉巖询兴,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乃沙,死亡現(xiàn)場離奇詭異,居然都是意外死亡诗舰,警方通過查閱死者的電腦和手機警儒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜀铲,你說我怎么就攤上這事边琉。” “怎么了记劝?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵变姨,是天一觀的道長。 經(jīng)常有香客問我厌丑,道長定欧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任怒竿,我火速辦了婚禮砍鸠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耕驰。我一直安慰自己睦番,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布耍属。 她就那樣靜靜地躺著托嚣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪厚骗。 梳的紋絲不亂的頭發(fā)上示启,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音领舰,去河邊找鬼夫嗓。 笑死,一個胖子當著我的面吹牛冲秽,可吹牛的內(nèi)容都是我干的舍咖。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼锉桑,長吁一口氣:“原來是場噩夢啊……” “哼排霉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起民轴,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤攻柠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后后裸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑰钮,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年微驶,在試婚紗的時候發(fā)現(xiàn)自己被綠了浪谴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖苟耻,靈堂內(nèi)的尸體忽然破棺而出篇恒,到底是詐尸還是另有隱情,我是刑警寧澤梁呈,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站蘸秘,受9級特大地震影響官卡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜醋虏,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一寻咒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧颈嚼,春花似錦毛秘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至限煞,卻和暖如春抹恳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背署驻。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工奋献, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旺上。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓瓶蚂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親宣吱。 傳聞我的和親對象是個殘疾皇子窃这,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 前言 最先接觸編程的知識是在大學(xué)里面钦听,大學(xué)里面學(xué)了一些基礎(chǔ)的知識,c語言倍奢,java語言朴上,單片機的匯編語言等;大學(xué)畢...
    oceanfive閱讀 3,095評論 0 7
  • 一卒煞、正則表達式的用途(搜索和替換) 1.1.正則表達式(regular expression,簡稱regex)是一...
    IIronMan閱讀 10,119評論 0 14
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5痪宰? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,513評論 1 45
  • 新的一周乖订,阿貓也開始新的計劃,緊湊了一些具练,不過可以調(diào)試調(diào)試步入正軌乍构,好好加油,親愛的扛点! 我也是在調(diào)試哥遮,好多東西不懂...
    聶一一閱讀 106評論 0 0
  • preg_match方法只進行一次匹配,返回匹配的數(shù)量(0或1)陵究。
    何幻閱讀 159評論 0 0