MacOS 下载的文件名字乱码问题
Posted asp.net ext vc++ gamehack asm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MacOS 下载的文件名字乱码问题相关的知识,希望对你有一定的参考价值。
MacOS 下载的文件名字乱码问题
第一种乱码类型
在网络上查了一圈,找到三个相关答案:
- 下载的文件名总是「乱码」?这里有各平台的解决方法 :
https://sspai.com/post/44360
Automator 流程:
https://cl.ly/2v1E3n3f1q2M - Mac OS X 下文件名乱码出现的原因和解决方法:
https://zzi.io/?p=275 - 预组字符:
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
制作“服务”步骤
-
打开automator
-
创建 quick action 类型
-
将run shell script 拖到右边下面
-
将粘贴代码到 do/done 之间
保存上面的得到的文件,系统会自动加载该文件,变成“右键”的服务。
此处作废【更新 2019-10-31】
我们使用参考一的文件,下载后,双击安装,点击文件,右击就可以改名了。
解释
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).
- Åström (U+00C5 U+0073 U+0074 U+0072 U+00F6 U+006D)
- Å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
效果如下:
制作步骤同上
- 在
automator
里面新建服务, - 找到
run shell script
——粘贴代码
- 找到
set value of variable
,拖到run shell script
下面,设置一个变量如:output
- 找到
Display Notification
,拖到set value of variable
下面,输入变量名:output
。 - 保存。在右键就可以看到服务了。
第三种乱码 [更新 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)\'
参考
-
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 下载的文件名字乱码问题的主要内容,如果未能解决你的问题,请参考以下文章