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

Posted asp.net ext vc++ gamehack asm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MacOS 下载的文件名字乱码问题相关的知识,希望对你有一定的参考价值。

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

千羽之城88IP属地: 新疆
12019.01.14 19:20:02字数 1,008阅读 33,710

第一种乱码类型

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

  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" 的字符编码。什么是 decomposed 和 precomposed 呢?

瑞典语 的姓氏 Å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.

MacOS安装flutter(MacOS下flutter环境配置)

第一步 下载压缩包

Flutter官网下载:https://flutter.dev/docs/development/tools/sdk/releases?tab=macos#macos

技术图片

 

 

 下载一个版本,我自己下载的1.22.2,大约1.19G

 

第二步 解压

1、新建一个文件夹,用于存放flutter文件,我自己建立在用户根目录下,名字随意,我的叫FlutterSDK,则路径如下:

/Users/xxxx/FlutterSDK

2、解压第一步下载好的压缩包到创建好的文件夹中,完成后路径应该是:

/Users/xxxx/FlutterSDK/flutter/...

 

第三步 配置镜像、环境变量

1、打开命令行工具,进入到自己创建的文件夹:

cd /Users/xxxx/FlutterSDK

2、确定环境变量配置的地方,执行指令:

echo $SHELL

看显示的是 /bin/zsh,还是/bin/bash

3、打开配置文件

上一步返回的是/bin/zsh,执行:

vim ~/.zshrc

上一步返回的是/bin/bash,执行:

vim ~/.bashrc

4、修改配置文件

技术图片

 

上一步打开后,命令行工具底部有个INSERT

按一下i,进入编辑模式,把下面的代码粘贴进去

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

再将flutter环境变量粘贴进去,xxxx替换为自己的路径
export PATH=xxxx/flutter/bin:$PATH

例如:我自己配置的路径就是

export PATH=/Users/xxxx/FlutterSDK/flutter/bin:$PATH

注意换行!

粘贴完成后,按一下ESC退出编辑模式,再输入:wq,回车,保存并关闭文件(注意冒号,是shift+;输入)

技术图片

 

 粘贴完成后应该是多了三行

技术图片

 

5、执行下面命令使镜像、环境变量生效 

source ~/.zshrc  或者    source ~/.bashrc

6、结束后,通过下面的命令检测是否配置成功

flutter -h

 注意这一步是联网,可能需要等一段时间才能完成,成功后大概是这个样子:

技术图片

 

第四步 检查必要的依赖

执行指令

flutter doctor

这里有两个开发工具需要下载:Xcode(开发苹果产品的IDE)、AndroidStudio(开发安卓产品的IDE)

技术图片

 

 

接下来按照要求安装必要的环境,不再赘述,后续操作可以参考以下链接

 

参考自:简书

 


以上是关于MacOS 下载的文件名字乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

压缩软件出现这样的乱码怎么办?

HttpServlet 下载图片中文名乱码问题

如何制作macos high sierra安装u盘

MacOS安装flutter(MacOS下flutter环境配置)

为啥我在酷狗音乐下载歌曲后歌词文件是乱码?

macos下matplotlib中文乱码