Macos “为什么?”;触摸屏åäö&引用;结果是\303\245\303\244\303\266“什么;?

Macos “为什么?”;触摸屏åäö&引用;结果是\303\245\303\244\303\266“什么;?,macos,unicode,encoding,zsh,Macos,Unicode,Encoding,Zsh,我在zsh中运行了命令touchåäö,希望用一些外来字符创建一个文件名 然后,我使用HTML页面中的文件上载对话框将该文件上载到服务器。在本例中,我使用的非ascii字节序列在Content DispositionHTTP头中结束,并创建一个错误 所以,我用这个函数来清理文件名 函数ascii(拉丁文1:string):string{ 拉丁语1=拉丁语1。替换(/[\u00C0-\u00C5]/g,“A”) 拉丁语1=拉丁语1。替换(/[\u00E0-\u00E5]/g,“a”) 拉丁语1=拉

我在zsh中运行了命令
touchåäö
,希望用一些外来字符创建一个文件名

然后,我使用HTML页面中的文件上载对话框将该文件上载到服务器。在本例中,我使用的非ascii字节序列在
Content Disposition
HTTP头中结束,并创建一个错误

所以,我用这个函数来清理文件名

函数ascii(拉丁文1:string):string{
拉丁语1=拉丁语1。替换(/[\u00C0-\u00C5]/g,“A”)
拉丁语1=拉丁语1。替换(/[\u00E0-\u00E5]/g,“a”)
拉丁语1=拉丁语1。替换(/[\u00D2-\u00D6]/g,“O”)
拉丁语1=拉丁语1。替换(/[\u00F2-\u00F6]/g,“o”)
拉丁语1=拉丁语1。替换(/[^\-\.0-9A-Z\u a-Z]+/g,“-”)
返回拉丁语1
}
想象一下,当文件名显示为
a-a-o
而不是
aao
时,我会感到惊讶。更可怕的是,如果我更改
latin1.replace(/[\u00E0-\u00E5]/g,“a”)
改为
“w”
我会得到
“w”
(注意帽子)

字符串是如何通过一些疯狂的编码加载到JavaScript环境中的?文件系统在这里真正使用的是什么编码?

原因是:

这个“字符串”实际上是一个Unicode链

\303\245\303\244\303\266
如果我们把它们分成两块,你会得到

\303\245 这是OCT 303(或十六进制C3)和OCT 245(或十六进制A5) 因此\303\245与C3A5相同,C3A5是å

这同样适用于其余代码

\303\244

\303\266


“\303\245\303\244\303\266”
是UTF-8编码字符串的八进制表示。知道了。但这并不能解释绳子是怎么弄乱的。它是磁盘上的UTF-8,当加载到浏览器时它是如何被销毁的?这是我真正困惑的部分。